# MCP Server Police UK

A Model Context Protocol (MCP) server providing tools to access and interact with the police.uk API, offering comprehensive data on crimes, police forces, neighbourhoods, and stop-and-search incidents across the UK.

## Features

- **21 distinct tools** for querying police.uk API endpoints
- Retrieve street-level crimes, neighbourhood details, force information, stop-and-search records, and more
- Built with the official MCP TypeScript SDK
- Easy integration with MCP-compatible systems
- Comprehensive error handling and type safety

## Installation

Install directly from npm:

```bash
npm install -g mcp-server-police-uk
```

Or use with npx (no installation required):

```bash
npx mcp-server-police-uk
```

## Usage

### With Claude Desktop

Add to your Claude Desktop configuration file:

**macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`
**Windows:** `%APPDATA%/Claude/claude_desktop_config.json`

```json
{
  "mcpServers": {
    "police-uk": {
      "command": "npx",
      "args": ["mcp-server-police-uk"]
    }
  }
}
```

### With other MCP clients

```bash
npx mcp-server-police-uk
```

## Available Tools

### Crime Data
- `get_street_level_crimes` - Retrieve street-level crimes by location or area
- `get_crimes_at_location` - Get crimes at a specific location
- `get_crimes_no_location` - Retrieve crimes that couldn't be mapped to a location
- `get_crime_categories` - Get valid crime categories
- `get_last_updated` - Get the date when crime data was last updated
- `get_outcomes_for_crime` - Get outcomes for a specific crime
- `get_street_level_outcomes` - Retrieve outcomes by location or area

### Police Forces
- `get_list_of_forces` - Get all police forces
- `get_force_details` - Get details for a specific police force
- `get_senior_officers` - Get senior officers for a police force

### Neighbourhoods
- `get_neighbourhoods` - Get neighbourhoods for a police force
- `get_neighbourhood_details` - Get details for a specific neighbourhood
- `get_neighbourhood_boundary` - Get boundary coordinates for a neighbourhood
- `get_neighbourhood_team` - Get team members for a neighbourhood
- `get_neighbourhood_events` - Get scheduled events for a neighbourhood
- `get_neighbourhood_priorities` - Get policing priorities for a neighbourhood
- `locate_neighbourhood` - Find neighbourhood team for given coordinates

### Stop and Search
- `get_stop_searches_by_area` - Get stop and searches within an area
- `get_stop_searches_by_location` - Get stop and searches at a specific location
- `get_stop_searches_no_location` - Get stop and searches with no location
- `get_stop_searches_by_force` - Get stop and searches by police force

## Examples

### Get crimes near a location
```typescript
// Get crimes within 1 mile of coordinates
get_street_level_crimes({
  lat: 51.5074,
  lng: -0.1278,
  date: "2024-01"
})
```

### Find your local police team
```typescript
// Find neighbourhood team for coordinates
locate_neighbourhood({
  lat: 51.5074,
  lng: -0.1278
})
```

### Get force information
```typescript
// Get details about Metropolitan Police
get_force_details({
  force_id: "metropolitan"
})
```

## API Rate Limits

This server respects the police.uk API rate limits. The API is free to use but has usage limits in place to ensure fair access for all users.

## Data Source

All data is sourced from the official police.uk API, which provides open data about policing in England, Wales, and Northern Ireland. The data is typically updated monthly.

## Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

## License

MIT License - see LICENSE file for details.

## Support

If you encounter any issues or have questions, please file an issue on the GitHub repository.
