mcp

Resolve any government entity worldwide and submit service requests. Open civic data for AI agents.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
92%
Naming quality
97%
Poisoning risk
60%
Permission match
100%
Protocol compliance
100%

Findings (3)

  • HIGHTool poisoning patterns detected
  • MEDIUMTool description contains URL to non-standard domainin search_cgj_reports
  • MEDIUMTool description contains URL to non-standard domainin resolve_jurisdiction

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~2,627Tokens (tool definitions)
~1.2 KBTypical response size
Significant attention impact (2.05% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "mcp": {
      "url": "https://mcp.ungovr.org/mcp"
    }
  }
}

Remote endpoints

https://mcp.ungovr.org/mcpstreamable-http

What it can do

Tool inventory

Tools (12)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢list_countries

List all countries with government entity data in UnGovr, including entity counts and coverage metadata.

Input Schema

{
  "type": "object",
  "properties": {},
  "required": []
}
🟢search_entities(country, state, query, type, limit, ...)

Search government entities by country, optional state/province, name query, and entity type. Searches every tier of government in the jurisdiction, not just the top one: counties, cities, school districts, special districts, fire and police districts, joint powers authorities and regulated utilities are all reachable. Returns matching entities with slugs, types, and website URLs, plus a "scope" field — "full" means every tier was searched, "direct_children" means only the top tier was (narrow by state and search again). Unrecognised arguments are rejected, not ignored.

Input Schema

{
  "type": "object",
  "properties": {
    "country": {
      "type": "string",
      "description": "Two-letter country code (e.g., \"us\", \"ca\", \"ie\")"
    },
    "state": {
      "type": "string",
      "description": "State/province code to narrow search (e.g., \"ca\" for California, \"on\" for Ontario)"
    },
    "query": {
      "type": "string",
      "description": "Substring to match against entity name (case-insensitive)"
    },
    "type": {
      "type": "string",
      "description": "Filter by entity type, exact match (e.g., \"county\", \"city\", \"school_district\", \"special_district\", \"fire_district\", \"police_department\", \"jpa\", \"regulated_utility\"). The parameter is named \"type\", not \"entity_type\"."
    },
    "limit": {
      "type": "number",
      "description": "Maximum results to return (default 20, max 100)"
    },
    "offset": {
      "type": "number",
      "description": "Number of results to skip for pagination (default 0)"
    }
  },
  "required": [
    "country"
  ]
}
🟢get_entity(slug)

Get full details for a specific government entity by its URL slug (e.g., "us/ca/ventura"). Works at any depth of the hierarchy, including cities, school districts and special districts (e.g., "us/ca/santa-barbara/spd/carpinteria-valley"). Returns name, type, website, parent, children, domain status, and metadata.

Input Schema

{
  "type": "object",
  "properties": {
    "slug": {
      "type": "string",
      "description": "Entity URL slug at any depth (e.g., \"us/ca/ventura\", \"us/ca/santa-barbara/city/carpinteria\", \"ie/cork\", \"kr/seoul\")"
    }
  },
  "required": [
    "slug"
  ]
}
🟢get_product_coverage(product)

Get the full hierarchy of government entities where an UnGovr product is available. product="request" returns the worldwide UnGovr Request coverage footprint (where you can file a government service request); product="cgj" returns Civil Grand Jury coverage. Public, no API key required.

Input Schema

{
  "type": "object",
  "properties": {
    "product": {
      "type": "string",
      "description": "Product id: \"request\" or \"cgj\"",
      "enum": [
        "request",
        "cgj"
      ]
    }
  },
  "required": [
    "product"
  ]
}
🟢get_open_records_law(jurisdiction)

Get the open records law (FOIA/RTI equivalent) governing a jurisdiction: name, citation, response deadlines, fees, exemptions, appeal process, records retention rules and RTI rating. Accepts a jurisdiction slug ("us/ca", "ie", "in/mh") or any UnGovr entity slug at any depth ("us/ca/santa-barbara/city/carpinteria" resolves to the California law). US federal FOIA is jurisdiction "us". When the answer comes from a parent jurisdiction the response includes "resolved_from".

Input Schema

{
  "type": "object",
  "properties": {
    "jurisdiction": {
      "type": "string",
      "description": "Jurisdiction slug or entity slug at any depth (e.g., \"us/ca\", \"us\", \"uk\", \"us/ca/ventura\")"
    }
  },
  "required": [
    "jurisdiction"
  ]
}
🟢search_transparency_laws(country, pillar, query, limit, offset)

Search government transparency laws across five domains: open records, open meetings, fiscal transparency, digital accessibility, and oversight bodies. Filter by country, pillar, and/or a substring of the law name, citation, or jurisdiction. Returns compact records with jurisdiction slugs; use get_open_records_law for full open-records detail.

Input Schema

{
  "type": "object",
  "properties": {
    "country": {
      "type": "string",
      "description": "Two-letter country code (e.g., \"us\", \"de\", \"br\")"
    },
    "pillar": {
      "type": "string",
      "description": "Law domain to search",
      "enum": [
        "records",
        "meetings",
        "fiscal",
        "accessibility",
        "oversight"
      ]
    },
    "query": {
      "type": "string",
      "description": "Substring to match against law name, citation, or jurisdiction (case-insensitive)"
    },
    "limit": {
      "type": "number",
      "description": "Maximum results to return (default 20, max 100)"
    },
    "offset": {
      "type": "number",
      "description": "Number of results to skip for pagination (default 0)"
    }
  },
  "required": []
}
🟢search_cgj_reports(county, year, query, limit, offset)

Search California Grand Jury reports by county, year, and/or title keyword. Returns report metadata (title, year, county, themes). Requires X-API-Key header (50 req/day). Get a key at https://www.ungovr.org/open-data/api-keys. For the list of valid county names, query the UnGovr entity API: GET https://data.ungovr.org/v1/entities/us/ca.json

Input Schema

{
  "type": "object",
  "properties": {
    "county": {
      "type": "string",
      "description": "County name (e.g., \"Los Angeles\", \"San Francisco\")"
    },
    "year": {
      "type": "number",
      "description": "Filter by jury year (reports from that year)"
    },
    "query": {
      "type": "string",
      "description": "Substring to match against report title (case-insensitive)"
    },
    "limit": {
      "type": "number",
      "description": "Maximum results to return (default 20, max 100)"
    },
    "offset": {
      "type": "number",
      "description": "Number of results to skip for pagination (default 0)"
    }
  },
  "required": []
}
🟢get_cgj_report(id)

Get full details for a specific California Grand Jury report by ID. Includes findings, recommendations, and responses. Requires X-API-Key header (50 req/day shared with data.ungovr.org). Get a key at https://www.ungovr.org/open-data/api-keys.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Report ID (from search results)"
    }
  },
  "required": [
    "id"
  ]
}
🟢list_service_types(country)

List available service request categories and types for a country. Returns service types grouped by category (e.g., Infrastructure, Utilities, Parks). Use this to discover valid service_type_id values for submit_service_request. Supported countries: US, IE (Ireland), GB (United Kingdom).

Input Schema

{
  "type": "object",
  "properties": {
    "country": {
      "type": "string",
      "description": "Two-letter country code: \"us\", \"ie\", or \"gb\" (default: \"us\")"
    }
  },
  "required": []
}
🔴submit_service_request(description, service_type_id, country_code, contact_email, address, ...)

Submit a government service request (e.g., report a pothole, broken streetlight, illegal dumping). The request is validated, geocoded, classified, routed to the correct government entity, and recorded. Delivery is enabled per-entity: where the target channel is live, the request is transmitted (response delivery.state = "sent", or "held" when queued for review); for entities not yet enabled it is recorded and routable but not transmitted (delivery.state = "dry_run", or "handoff" with a redirect_url the user finishes). Always check delivery.state. Requires X-API-Key header. Rate limit: 2 requests/hour. Supported countries: US, IE (Ireland), GB (United Kingdom).

Input Schema

{
  "type": "object",
  "properties": {
    "description": {
      "type": "string",
      "description": "Description of the issue (10-5000 characters)"
    },
    "service_type_id": {
      "type": "string",
      "description": "Service type ID from list_service_types (optional — auto-classified from description if omitted)"
    },
    "country_code": {
      "type": "string",
      "description": "Country code: \"US\", \"IE\", or \"GB\" (default: \"US\")"
    },
    "contact_email": {
      "type": "string",
      "description": "Email of the person reporting the issue"
    },
    "address": {
      "type": "string",
      "description": "Address to geocode (e.g., \"123 Main St, Ventura, CA 93001\"). Provide this OR latitude+longitude."
    },
    "latitude": {
      "type": "number",
      "description": "Latitude (-90 to 90). Provide with longitude as alternative to address."
    },
    "longitude": {
      "type": "number",
      "description": "Longitude (-180 to 180). Provide with latitude as alternative to address."
    },
    "images": {
      "type": "array",
      "description": "Up to 3 base64-encoded images (optional). Each item: {data: \"base64...\", media_type: \"image/jpeg\"}",
      "maxItems": 3,
      "items": {
        "type": "object",
        "properties": {
          "data": {
            "type": "string",
            "description": "Base64-encoded image data"
          },
          "media_type": {
            "type": "string",
            "description": "MIME type (image/jpeg, image/png)"
          }
        },
        "required": [
          "data"
        ]
      }
    }
  },
  "required": [
    "description",
    "contact_email"
  ]
}
🟢resolve_domain_jurisdiction(domain)

Best-effort mapping from a domain to the jurisdiction whose law governs its OPERATOR. Authoritative for government domains in the UnGovr corpus (method "entity_domains"); otherwise an inference from suffix or country-code TLD, or "unknown". Never uses server or edge-node location: a CDN PoP's geography is not the legal signal, the operator's establishment is. IP addresses are refused for the same reason. Requires X-API-Key header (50 req/day, shared with data.ungovr.org). Get a key at https://www.ungovr.org/open-data/api-keys.

Input Schema

{
  "type": "object",
  "properties": {
    "domain": {
      "type": "string",
      "description": "Hostname or URL (e.g. \"ventura.org\", \"https://www.stadt-koeln.de/x\"). IP addresses are rejected."
    }
  },
  "required": [
    "domain"
  ]
}
🟢resolve_jurisdiction(code, region)

Maps an ISO 3166 code to the UnGovr jurisdictions whose law reaches the place, from the published crosswalk (https://data.ungovr.org/v1/crosswalk/iso-3166/index.json, CC BY 4.0). Accepts a country (FR, PR, EU, XK), a first-level subdivision (US-CA, GB-ENG), or the country and region an edge emits as two arguments (country US, region CA). Returns the canonical URN, the stack of governing layers (the place, its sovereign, a union or treaty area that reaches it), OCD-ID, Wikidata QID, precision, a reason when a code cannot be placed, and the crosswalk version. It maps what an edge already knows: it never resolves an IP address (those are refused and not echoed), a city or a postal code, and Cloudflare's XX and T1 answer with a reason, not a guess. Free, rate-limited per IP.

Input Schema

{
  "type": "object",
  "properties": {
    "code": {
      "type": "string",
      "description": "An ISO 3166 code (\"US-CA\", \"FR\"), or the country when region is given (\"US\"). Never an IP address."
    },
    "region": {
      "type": "string",
      "description": "Optional. The region an edge sent beside the country: \"CA\" or \"US-CA\". An empty string means the edge sent none and the answer is at country precision."
    }
  },
  "required": [
    "code"
  ]
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded12 tools
verifiedversion not recorded12 tools
verifiedversion not recorded12 tools
verifiedversion not recorded11 tools
verifiedversion not recorded11 tools
verifiedversion not recorded11 tools