Skip to main content
Glama

Search Charity Commission Register

charity_search
Read-onlyIdempotent

Search the Charity Commission register of England and Wales by name or keyword.

Returns matching charities with registration number, status, and registration date. Use charity_profile for full details once you have the charity number. The upstream searchCharityName endpoint returns the full list in one shot — pagination is applied client-side via offset/limit. A query that matches nothing is a successful empty result (charities: []), not an error — the upstream endpoint signals "no matches" with an HTTP 404, which is translated back into an empty result here rather than surfaced as a not-found failure.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
limitNoMax items to return in this page. Default 20; raise to 100 for bulk views.
queryYesCharity name or keyword to search for
offsetNoNumber of items to skip before this page. Default 0.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
limitYesMax items requested for this page.
queryYesSearch term applied.
totalYesTotal matches returned by upstream.
offsetYesNumber of items skipped before this page (client-side).
has_moreYesTrue if more items may exist beyond this page. Re-call with offset=offset+returned to continue.
returnedYesItems actually returned on this page.
charitiesNoMatching charity records.

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. Added
  2. Removed
  3. Changed17 schema fields changed
    • addedInput schema / properties / limit
      Added value: +{
      +  "default": 20,
      +  "description": "Max items to return in this page. Default 20; raise to 100 for bulk views.",
      +  "maximum": 100,
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • addedInput schema / properties / offset
      Added value: +{
      +  "default": 0,
      +  "description": "Number of items to skip before this page. Default 0.",
      +  "maximum": 10000,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • removedInput schema / properties / page_num
      Removed value: -{
      -  "default": 1,
      -  "description": "Page number (1-indexed)",
      -  "minimum": 1,
      -  "type": "integer"
      -}
    • removedInput schema / properties / page_size
      Removed value: -{
      -  "default": 20,
      -  "description": "Number of results per page (max 100)",
      -  "maximum": 100,
      -  "minimum": 1,
      -  "type": "integer"
      -}
    • removedInput schema / properties / registration_status
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": "Registered",
      -  "description": "Filter by registration status: 'Registered' or 'Removed'. Default: Registered."
      -}
    • removedInput schema / properties / response_format
      Removed value: -{
      -  "default": "markdown",
      -  "description": "Output format: 'markdown' or 'json'",
      -  "type": "string"
      -}
    • changedOutput schema / description
      Previous value: -"Generic wrapper for non-object return types."New value: +"Paginated result of a Charity Commission name search."
    • addedOutput schema / properties / charities
      Added value: +{
      +  "description": "Matching charity records.",
      +  "items": {
      +    "description": "A single hit in a Charity Commission name search.",
      +    "properties": {
      +      "charity_name": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "Registered charity name."
      +      },
      +      "charity_number": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "Charity Commission registration number. Pass to charity_profile for the full record."
      +      },
      +      "date_of_registration": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "Date of first registration (ISO YYYY-MM-DD)."
      +      },
      +      "reg_status": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "Registration status code as returned upstream: 'R' registered, 'RM' removed."
      +      },
      +      "reg_status_label": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "description": "Human-readable registration status ('Registered', 'Removed')."
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / has_more
      Added value: +{
      +  "description": "True if more items may exist beyond this page. Re-call with offset=offset+returned to continue.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / limit
      Added value: +{
      +  "description": "Max items requested for this page.",
      +  "type": "integer"
      +}
    • addedOutput schema / properties / offset
      Added value: +{
      +  "description": "Number of items skipped before this page (client-side).",
      +  "type": "integer"
      +}
    • addedOutput schema / properties / query
      Added value: +{
      +  "description": "Search term applied.",
      +  "type": "string"
      +}
    • removedOutput schema / properties / result
      Removed value: -{
      -  "type": "string"
      -}
    • addedOutput schema / properties / returned
      Added value: +{
      +  "description": "Items actually returned on this page.",
      +  "type": "integer"
      +}
    • addedOutput schema / properties / total
      Added value: +{
      +  "description": "Total matches returned by upstream.",
      +  "type": "integer"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "result"
      -]New value: +[
      +  "query",
      +  "total",
      +  "offset",
      +  "limit",
      +  "returned",
      +  "has_more"
      +]
    • removedOutput schema / x-fastmcp-wrap-result
      Removed value: -true
  4. First observed

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark it read-only and idempotent, but the description adds valuable behavioral detail: the upstream endpoint returns a full list in one shot, pagination is client-side, and an upstream HTTP 404 is translated into a successful empty result rather than an error. This meaningfully changes how the agent should interpret responses.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Every sentence delivers distinct value: scope, returned fields, sibling routing, pagination behavior, and empty-result semantics. There is no filler, no redundancy with the schema, and the key purpose is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given an output schema, full parameter documentation, and strong safety hints in annotations, the description covers all practical gaps an agent needs: geographical scope, response fields, navigation to charity_profile, pagination semantics, and error translation behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already describes all parameters clearly, but the description adds important deeper context: offset/limit apply client-side because the upstream endpoint returns everything at once. This helps an agent understand the mechanics of pagination beyond the raw schema definitions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly names the action ('Search'), the resource ('Charity Commission register of England and Wales'), and the scope ('by name or keyword'). It also distinguishes itself from the charity_profile sibling by describing search-level results versus full details.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear direction: use this tool to search and find charity numbers, then 'Use charity_profile for full details once you have the charity number.' This effectively states when to use this tool versus its nearest alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A4.2/5.0
Disambiguation4/5

The domain-specific tools are clearly distinct (search vs profile for each register), and the generic search/fetch tools are designed to route across them. Potential overlap between company_officers and company_psc is resolved by clear descriptions of officers vs beneficial ownership. Slight ambiguity exists between generic fetch/search and the domain-specific counterparts, but the routing logic is well-documented.

Naming Consistency4/5

Most tools follow a consistent resource_action pattern with clear prefixes (charity_, company_, disqualified_, gazette_). Exceptions like company_officers, company_psc, sanctions_screen, and vat_validate deviate from the verb-first convention, and generic tools (fetch, search, get_prompt, list_prompts) do not follow the pattern. Overall, the naming is readable and predictable despite a few outliers.

Tool Count4/5

With 17 tools, the server sits slightly above the typical 3-15 well-scoped range, but the breadth of the domain (Companies House, Charity Commission, disqualifications, Gazette insolvency, sanctions, land registry, VAT) justifies the count. Each tool serves a distinct data source or action, and the two prompt-management tools are standard MCP utilities. The count feels appropriate rather than excessive.

Completeness4/5

The server covers the core due diligence workflow: searching and retrieving profiles for companies, charities, and disqualified directors, plus insolvency notices, sanctions screening, land transactions, and VAT validation. Minor gaps exist, such as no direct tool for company accounts or court judgments, but these are not core to the apparent purpose and can be worked around.