Skip to main content
Glama
Stealth-Labs-LTD

GovUK MCP Server

README.md
# Gov.uk MCP Server

A comprehensive Model Context Protocol (MCP) server providing access to 27 UK government data sources and services. Built for Claude Desktop and other MCP-compatible clients.

> **Note:** This is a hobby project, expect issues and use for demonstration purposes only.

## ๐ŸŒŸ Features

- **33 Government APIs**: Companies House, Parliament, NHS, Transport, and more
- **15 Visual Widgets**: Rich UI components via MCP Apps for data visualization
- **Production-Ready**: Comprehensive input validation, error sanitization, rate limiting
- **Type-Safe**: Full input validation with regex patterns
- **Secure**: Sanitized errors, XSS protection, origin validation
- **Fast**: Concurrent execution for bulk operations (voting records)

### ๐Ÿ’ฌ Example Prompts

Try asking:
- "What are the five nearest postcodes to SW1A 1AA?"
- "When is the next Bank Holiday?"
- "How can I get from Brixton to St Pancras?"
- "What's the status of the Circle Line?"
- "Where's my nearest Hospital?"
- "Who's my MP?"
- "What's their voting record?"

## ๐Ÿ“ฆ Installation

```bash
# Clone the repository
git clone https://github.com/brummiesteven/GovUK-MCP.git
cd GovUK-MCP

# Install dependencies
pip install -e .

# Or with dev dependencies
pip install -e ".[dev]"
```

## ๐Ÿ”‘ API Keys Setup

Create a `.env` file in the project root:

```bash
# Required for Companies House tools
COMPANIES_HOUSE_API_KEY=your_companies_house_key

# Required for EPC tools
EPC_API_KEY=your_email:your_epc_key

# Optional (works without but has lower rate limits)
TFL_API_KEY=your_tfl_key
```

### API Key Requirements

**Required APIs** (2):
- **Companies House API**: https://developer.company-information.service.gov.uk/
- **EPC API**: https://epc.opendatacommunities.org/

**Optional APIs** (1):
- **TfL API**: https://api-portal.tfl.gov.uk/ (works without key but has rate limits)

**No Key Required** (24 tools):
Postcode, Food Hygiene, Bank Holidays, Gov.uk Search, Flood Warnings, Police Crime, Courts, Charity, NHS, Legislation, CQC, Parliamentary tools

## ๐Ÿš€ Usage

### With Claude Desktop

Add to your `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "gov-uk": {
      "command": "python",
      "args": ["-m", "gov_uk_mcp.server"],
      "env": {
        "COMPANIES_HOUSE_API_KEY": "your_key_here",
        "EPC_API_KEY": "your_email:your_key_here"
      }
    }
  }
}
```

### Standalone (For Development)

```bash
python -m gov_uk_mcp.server
```

## ๐Ÿ› ๏ธ Available Tools (33)

### Transport (6)
- `get_tube_status` - All Tube lines status
- `get_line_status` - Specific line status
- `plan_journey` - Journey planner with step-by-step directions
- `get_bike_points` - Santander Cycles availability
- `get_road_status` - Major road conditions
- `search_stops` - Find bus stops, stations, etc.

### Business & Finance (6)
- `search_companies`, `get_company`, `get_company_officers`, `get_company_filing_history`
- `search_charities`, `get_charity`

### Location & Geographic (5)
- `lookup_postcode`, `nearest_postcodes`
- `search_food_establishments`, `get_flood_warnings`, `get_crime_by_postcode`

### Healthcare (5)
- `find_gp_surgeries`, `find_hospitals`, `find_pharmacies`
- `search_cqc_providers`, `get_cqc_provider`

### Parliamentary (5)
- `find_mp`, `search_hansard`, `get_voting_record`
- `search_divisions`, `search_questions`, `get_questions_by_mp`

### Other Services (4)
- `search_epc_by_postcode`, `find_courts`, `search_govuk`, `get_bank_holidays`, `search_legislation`


## ๐ŸŽจ MCP Apps Widgets

This server includes 15 visual widgets compatible with [MCP Apps](https://github.com/anthropics/mcp-apps)-enabled clients. Widgets provide rich, interactive visualizations of API responses.

| Widget | Description |
|--------|-------------|
| `tube-status` | London Underground status with line colors |
| `postcode-lookup` | Location information grid |
| `company-info` | Companies House profile card |
| `food-hygiene` | FSA ratings with score indicators |
| `flood-warnings` | Environment Agency alerts |
| `mp-info` | MP profile with photo and party colors |
| `bank-holidays` | Upcoming holidays calendar |
| `crime-stats` | Crime breakdown by category |
| `cqc-rating` | Care quality ratings display |
| `charity-info` | Charity Commission details |
| `voting-record` | Parliamentary voting history |
| `bike-points` | Santander Cycles availability |
| `journey-planner` | TfL journey with step-by-step |
| `road-status` | Major road conditions |
| `nhs-services` | GP, hospital, pharmacy finder |

Widgets are automatically served when tools are called from compatible clients.


## ๐Ÿงช Testing

```bash
# Run all tests
pytest

# With coverage
pytest --cov=gov_uk_mcp --cov-report=html

# Specific test
pytest tests/test_validation.py -v
```

## ๐Ÿ“ License

MIT - see [LICENSE](LICENSE)

## ๐Ÿ™ Credits

- [MCP](https://github.com/anthropics/mcp) by Anthropic
- UK Government Open Data APIs
- Python ecosystem

---

**Built for the UK developer community** ๐Ÿ‡ฌ๐Ÿ‡ง

TDQS

B3.4/5.0

Scored across 33 tools

Disambiguation4/5

Most tools have distinct purposes (e.g., find_gp_surgeries vs find_hospitals vs find_pharmacies are all healthcare but different venues). However, some pairs like get_company vs search_companies or get_line_status vs get_tube_status could cause minor confusion, but descriptions clarify the differences.

Naming Consistency4/5

Naming follows a consistent verb_noun pattern with underscores (find_, get_, search_, lookup_, nearest_, plan_). Verbs vary by action type but are used predictably: 'find' for location-based lookups, 'get' for specific entities, 'search' for queries. No mixing of camelCase or other styles.

Tool Count3/5

With 33 tools, the server covers a wide breadth of UK government services (postcodes, health, transport, parliament, etc.). While it's above the typical 15-tool threshold, the scope justifies many tools, but some could potentially be merged (e.g., get_line_status into get_tube_status).

Completeness4/5

The tool set covers many important government areas: location/postcodes, healthcare facilities, company/charity info, parliamentary data, transport, crime, flooding, and more. Minor gaps exist (e.g., no tools for benefits, taxes, or residency), but the coverage for the intended domain is solid.

Maintenance

ActivityInactive
ResponsivenessNo issues