Skip to main content
Glama
dsanchezp18

MapleStats MCP

MapleStats MCP gives AI agents (Claude, Cursor, and any MCP-compatible client) structured, typed access to Canadian open data through a single server — covering Statistics Canada (tables, Census and public use microdata), the Bank of Canada, CMHC, federal agencies, and federal, provincial, territorial and municipal open-data portals, in English and French.

MapleStats MCP donne aux agents IA (Claude, Cursor et tout client compatible MCP) un accès structuré et typé aux données ouvertes canadiennes par l'entremise d'un seul serveur — couvrant Statistique Canada, la Banque du Canada, ainsi que des portails CKAN fédéraux, provinciaux, territoriaux et municipaux vérifiés.

See PROJECT_GUIDE.md for the project vision and ROADMAP.md for source coverage status.

The easiest way: ask your agent

  1. Copy this prompt.

  2. Paste it into Claude Code, Codex, Cursor or any agent that can run commands on your computer.

  3. Restart the agent when it says so, then ask for data.

Install the MapleStats MCP server and connect it to this agent. Follow the setup steps in https://github.com/dsanchezp18/maplestats-mcp

Prefer to do it by hand? See Install locally or the Connect page.

Instructions for the agent doing the setup

  1. Make sure uv is installed (uv --version). If it is missing, install it with the official installer from that page.

  2. Use this launch command, which fetches the release from PyPI the first time and reuses it afterwards: uvx maplestats-mcp.

  3. Register it with the client you are running in, under the name maplestats:

    • Claude Code: claude mcp add --scope user maplestats -- uvx maplestats-mcp

    • Codex CLI: codex mcp add maplestats -- uvx maplestats-mcp

    • Cursor, Claude Desktop and other mcpServers clients: add the entry below to the client's config file (Cursor: ~/.cursor/mcp.json; Claude Desktop: ~/Library/Application Support/Claude/claude_desktop_config.json on macOS, %APPDATA%\Claude\claude_desktop_config.json on Windows), keeping any servers already there.

    • VS Code: the same entry under a servers key (not mcpServers) in .vscode/mcp.json.

    {
      "mcpServers": {
        "maplestats": {
          "command": "uvx",
          "args": ["maplestats-mcp"]
        }
      }
    }
  4. The server speaks MCP over stdio and needs no API key, account or open port. Tell the user to restart or reload the client, then check that the search_tools tool is listed.

More clients and hosting options: Connect.

Related MCP server: Données Québec MCP

Bilingual by design / Conçu pour être bilingue

Tools accept lang: "en"|"fr", several sources are French-first or French-only (Quebec's and Montreal's CKAN catalogues, ckan_* with portal="qc"/"montreal"), and tool discovery works in either language: every tool's docstring carries both a Keywords: line and a Mots-clés : line, so calling search_tools with a French-language query (e.g. "recherche de jeux de données sur le climat") finds the same tools an equivalent English query would. Read docs://catalogue for a bilingual (EN/FR) one-line description of every module. Not every underlying government portal is itself bilingual — see each module's own docstring (or docs://catalogue) for where lang genuinely changes the response versus where it is a documented no-op on a monolingual source.

Chaque outil accepte lang : "en"|"fr", plusieurs sources sont francophones ou exclusivement en français (les catalogues CKAN du Québec et de Montréal, ckan_* avec portal="qc"/"montreal"), et la découverte d'outils fonctionne dans les deux langues : chaque outil porte à la fois une ligne Keywords: et une ligne Mots-clés :, de sorte qu'un appel à search_tools avec une requête en français trouve les mêmes outils qu'une requête équivalente en anglais. Consultez docs://catalogue pour une description bilingue (EN/FR) de chaque module. Tous les portails gouvernementaux sous-jacents ne sont pas eux-mêmes bilingues — consultez la documentation de chaque module (ou docs://catalogue) pour savoir où lang change réellement la réponse et où il s'agit d'un no-op documenté sur une source unilingue.

Status

About 200 tools across these sources (run docs://catalogue for a bilingual one-line description of each module):

Area

Tool prefixes

Covers

Reproduction code

reproduce_code

R, Python, Stata or Julia code that fetches the same data from the source (cansim, canivt, polars, TidierFiles, import delimited)

Query planner

plan_query

Always visible: turns a question into an ordered, multi-source plan with caveats on combining sources

Statistics Canada

wds_, sdmx_, rdaas_, statcan_*

Public use microdata files (find, list downloads, read codebooks and weights without downloading the ZIP, weighted tables with DuckDB), 2006-2016 census data tables (CSV, SDMX, Beyond 20/20 with a canivt route), tables and series, classifications (e.g. NAICS), 2001–2021 Census Profiles, The Daily, indicators, daily bulk-update files, definitions/methods and analysis catalogues, survey directory and IMDB metadata, census geography, SDG hub

Bank of Canada

boc_

Valet series, groups, observations

CMHC

cmhc_, cmhc_dt_

Housing Market Information Portal tables; Excel data tables

ECCC / MSC

eccc_

Weather, climate, hydrometric, air quality (OGC API)

ISED

ised_corporations_, ised_spectrum_, ised_cipo_

Federal corporations, spectrum licences, trademarks

Canada Gazette

gazette_

Part I notices and proposed regulations, Part II registered regulations: issues, notice lists, notice text (EN/FR)

Vehicle recalls

tc_recalls_

Transport Canada motor vehicle safety recalls by make, model and year, with bilingual details

Dairy supply management

cdc_

Canadian Dairy Commission: special milk class component prices since 2002, butter support price, national total quota, Harmonized Milk Classification System, milk production by province and milk class sales (EN/FR); provincial marketing boards checked and routed to StatCan tables

Animal disease

cfia_

CFIA federally reportable terrestrial animal diseases: yearly counts 2011 to now, each confirmed detection with date, province and species (chronic wasting disease, scrapie, bovine TB, BSE, cysticercosis), and every avian influenza infected premises since December 2021 with status by province (EN/FR); rabies, aquatic diseases and food testing via ckan_

Recalls and safety alerts

recalls_

Health Canada, CFIA and Transport Canada recalls and alerts (recalls-rappels.canada.ca): search, counts by year or category, affected products and lots (EN/FR)

Consumer banking products

fcac_

FCAC comparison tools: credit cards (annual fees, purchase, cash advance and balance transfer rates, rewards, insurance) and chequing and savings accounts (monthly fees, transactions, interest tiers, NSF and other fees) by province, read live (EN/FR)

Geocoding and place names

nrcan_geo_

NRCan Geolocator (places, addresses, postal codes) and Canadian Geographical Names Database (EN/FR)

Parliament

parliament_

House of Commons bills, recorded votes with party and MP ballots, MPs, Hansard and committee speeches, full-text Hansard search, and committees with their meetings, witnesses and transcripts (via unofficial OpenParliament.ca, EN/FR)

Senate votes

senate_

Senate of Canada recorded votes by session or bill, with each senator's vote (sencanada.ca, EN/FR)

Earthquakes

earthquakes_

Earthquakes Canada (NRCan) event catalogue by date, magnitude, point radius or bbox

Health system

cihi_

CIHI Indicator Library: ~200 indicators (hospital mortality, readmissions, wait times, spending), data by place and year (EN/FR)

Public health surveillance

phac_infobase_

PHAC Health Infobase dashboard files: respiratory viruses and FluWatch+, wastewater, opioid and stimulant harms, measles, mpox, TB, vaccine safety, archived COVID-19 (French titles for all; French data files for 9 of 55)

Federal spending

gc_infobase_

GC InfoBase open datasets: Estimates, Public Accounts, program spending/FTEs, results (EN/FR)

Energy regulation

cer_

Canada Energy Regulator CSVs: pipeline throughput and capacity, oil/gas/LNG/NGL exports, tolls, incidents (EN/FR)

Energy use

nrcan_energy_use_

NRCan Comprehensive Energy Use Database and energy surveys (SHEU, SCIEU, ICE, ...), EN/FR tables

Oceans

dfo_iwls_

DFO tide stations, tide times, predicted and observed water levels

Grain

cgc_

Canadian Grain Commission: Grain Statistics Weekly from 2013-14 (deliveries, shipments, stocks, terminal receipts and exports by province, port and grade) and monthly grain exports by destination country since 2013 (EN/FR)

Other federal

ircc_, ircc_monthly_, pbo_, elections_financial_returns_, cra_digital_economy_registry_, nrcan_nbac_, canadabuys_

Express Entry draws, IRCC monthly immigration tables (permanent residents, permits, asylum), Parliamentary Budget Officer costings and outlooks, candidate financial returns, digital platform operators, burned areas, federal tenders, contract awards and contract history

Provincial agencies

aer_, bcgw_, ab_economic_, isq_

Alberta Energy Regulator; BC Geographic Warehouse; Alberta Economic Dashboard (~260 curated economic tables); Institut de la statistique du Québec (~7,000 detailed tables)

CKAN catalogues

ckan_ + portal

Federal (open.canada.ca), Ontario, BC, Alberta, Quebec, NWT, Yukon, Montreal, Toronto, Regina (ckan_list_portals): dataset search/detail and DataStore row queries

ArcGIS Hub portals

arcgis_hub_ + portal

33 provinces, cities, regions, and agencies (arcgis_hub_list_portals)

Socrata portals

socrata_ + portal

Nova Scotia, New Brunswick, Calgary, Edmonton, Winnipeg (socrata_list_portals)

Other municipal

opendatasoft_vancouver_, nl_opendata_, eps_, ets_, epcor_

Vancouver (Opendatasoft); Newfoundland and Labrador (HTML catalogue); Edmonton police occurrences, real-time transit (GTFS-RT), and EPCOR water quality

Many other federal administrative series (CRA statistics and charities, OSFI returns, ISED insolvency data) are ordinary open.canada.ca datasets, reachable through ckan_search_datasets(portal="federal", fq="organization:<org>").

Most tools accept lang: "en"|"fr" (a documented no-op on single-language sources), and every tool returns a typed response with a provenance block (source, URL, query time, freshness, limits). See AGENTS.md for the full architecture and response contract.

Install locally (no Docker required)

MapleStats MCP is on PyPI as maplestats-mcp. With uv, MCP clients can run it without a separate install step:

uvx maplestats-mcp

Or install the command once:

uv tool install maplestats-mcp
pip install maplestats-mcp

For the development version, install from GitHub instead: uv tool install git+https://github.com/dsanchezp18/maplestats-mcp.git.

Once installed, the command is on your PATH:

maplestats-mcp

It speaks MCP over stdio by default, which is the format local MCP clients expect. The process is started by the client; do not open a port and do not run Docker.

To update an existing installation:

uv tool upgrade maplestats-mcp

If you are working from a clone instead:

uv sync
uv run maplestats-mcp

MCP client configuration

For clients that accept a standard mcpServers JSON configuration, add:

{
  "mcpServers": {
    "maplestats": {
      "command": "uvx",
      "args": ["maplestats-mcp"]
    }
  }
}

For Claude Code:

claude mcp add --scope user maplestats -- uvx maplestats-mcp

If you installed the command with uv tool install or pip, use "command": "maplestats-mcp" with no args instead of uvx.

On Windows, make sure the directory where uv installs tools is on PATH, then restart the MCP client after installation.

Development quick start

uv sync

Run directly from a checkout (stdio, for local MCP clients):

uv run maplestats-mcp

Run as a hosted HTTP server:

MAPLE_TRANSPORT=http MAPLE_HOST=0.0.0.0 MAPLE_PORT=8000 uv run maplestats-mcp

See Hosting below for the full environment-variable surface (auth, rate limiting, TLS).

Using it

Tools are discovered through a search layer rather than listed flat — call search_tools with a plain-language query, then call_tool with the name it returns:

{"name": "search_tools", "arguments": {"query": "consumer price index"}}
{"name": "call_tool", "arguments": {"name": "wds_search_cubes", "arguments": {"query": "consumer price index"}}}

Two example workflows, also available as guided MCP prompts (find_and_fetch_series, look_up_classification, build_sdmx_or_key):

  • Find and fetch a data series: wds_search_cubes → wds_get_cube_metadata → wds_get_series_info_from_cube_pid_coord → wds_get_data_from_vectors.

  • Look up a classification: rdaas_search_classifications → rdaas_get_classification → rdaas_get_classification_categories_detailed.

Development

uv sync                          # install
uv run ruff check src tests      # lint
uv run ruff format src tests     # format
uv run pyright                   # type check
uv run pytest                    # unit tests (mocked, no network)

Live verification (hits the real StatCan APIs — needs outbound HTTPS, not just mocks):

.\scripts\verify.ps1

runs the full gate above plus every scripts/smoke_test*.py live smoke test. If Docker is installed, it also runs a build, compose up, and health check.

See AGENTS.md for the full contributor guide, including how to add a new source module.

Website: site/ holds the project website, generated from the tool registry by scripts/build_site.py:

uv run python scripts/build_site.py              # writes build/site/
uv run python -m http.server --directory build/site 8080

Hosting

Env var

Default

Purpose

MAPLE_TRANSPORT

stdio

stdio for local MCP clients; http for hosting

MAPLE_HOST / MAPLE_PORT

127.0.0.1 / 8000

HTTP bind address

MAPLE_AUTH_TOKEN

unset

Bearer token required on /mcp if set

MAPLE_REQUIRE_AUTH

0

Refuse to start without a token if 1

MAPLE_RATE_LIMIT_REQUESTS / MAPLE_RATE_LIMIT_WINDOW_SECONDS

120 / 60

Per-client sliding-window rate limit

MAPLE_MAX_CONCURRENT_REQUESTS

8

Cap on in-flight MCP requests (POST/DELETE); excess requests wait up to 5 s, then get 503. Long-lived GET event streams are not counted

MAPLE_SSL_CERTFILE / MAPLE_SSL_KEYFILE

unset

TLS termination in-process

MAPLE_TRUST_PROXY_HEADERS

0

Key rate limits on X-Forwarded-For; enable only behind a proxy that sets it

MAPLE_CACHE_MAX_ENTRIES

2000

Max entries per TTL bucket in the in-memory response cache

MAPLE_TOOL_TIMEOUT_SECONDS

120

Longest a tool call may run before it fails with a named error

MAPLE_PUMF_CACHE_DIR

system temp

Where statcan_pumf_tabulate keeps downloaded microdata; use a persistent volume when hosted

MAPLE_PUMF_CACHE_MAX_GB

5

Size cap on that cache (least recently used files removed first)

MAPLE_IP_HORIZONS_CACHE_DIR

system temp

Where the CIPO patent lookup and search tools keep downloaded tables as Parquet; filled only on first use

MAPLE_IP_HORIZONS_CACHE_MAX_GB

3

Size cap on that cache (least recently used files removed first)

MAPLE_TRANSPORT=http MAPLE_REQUIRE_AUTH=0 docker compose up --build

Docker is an optional deployment method. For a personal computer, use the local installation above. If the HTTP server is exposed beyond the local machine, set MAPLE_AUTH_TOKEN and keep MAPLE_REQUIRE_AUTH=1.

GET /health reports uptime and version; it bypasses auth/rate limiting so it's always reachable.

License

MIT

Acknowledgments

The module architecture (per-source folders, auto-registered tools, bilingual response envelope) and the hosting layer (Bearer auth, sliding-window rate limiting, health checks) were informed by prior open-source work building MCP servers for government and public data — most directly ReyemTech's mcp-canada for the module pattern and DweskZ's EcuDataMCP for the hosting middleware, alongside the StatCan-specific benchmarks reviewed while researching this project. Thank you to their authors for building in the open.

Much of the Canadian data work here stands on Jens von Bergmann's (mountainMath) R packages and their co-authors:

  • cmhc: the CMHC module was audited against its reverse-engineering of CMHC's Housing Market Information Portal.

  • cansim: the R code that reproduce_code generates for Statistics Canada tables and vectors uses it.

  • cancensus: a model for census data access in R.

  • canivt: reads Beyond 20/20 IVT files; census tables and Borealis deposits that exist only in that format are routed to it, and its sampling notes pointed to Borealis as the main IVT holder outside StatCan.

Alternatives

MapleStats is not the only way to reach this data. The website's About page lists the alternatives: other MCP servers for Canadian data, R and Python packages, and the official APIs MapleStats calls.

Available Tools

3 tools
call_toolCall ToolB
Read-onlyIdempotent

Call a tool by name with the given arguments.

Use this to execute tools discovered via search_tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe name of the tool to call
argumentsNoArguments to pass to the tool

TDQS

B3.4/5.0
Behavior2/5

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

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the description needed to add context beyond the safety profile. Instead it adds nothing behavioral: no error behavior for unknown tool names, no note that the arguments object must conform to the target tool's own schema, and no statement about how results are returned.

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

Conciseness4/5

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

Two short sentences with the core action in the first line and the routing note in the second; nothing is padded. It is efficient, though the second sentence could have carried more of the behavioral detail the tool lacks.

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

Completeness3/5

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

There is no output schema, so the description is not obligated to explain return values. However, for an openWorld dispatcher that can invoke arbitrary tools, the critical mechanics (unknown-tool handling, argument-schema conformance, error propagation) go unaddressed, leaving it only minimally adequate.

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

Parameters3/5

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

Schema description coverage is 100% and both parameters ('name', 'arguments') are documented in the schema, so the baseline is 3. The phrase 'by name with the given arguments' merely restates the schema and adds no format or constraint detail, such as the fact that 'arguments' must match the invoked tool's input schema.

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

Purpose4/5

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

States a specific verb and resource ('Call a tool by name with the given arguments') and is clearly distinguishable from search_tools, which discovers rather than executes. It does not mention plan_query, so sibling differentiation is only partial.

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

Usage Guidelines4/5

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

'Use this to execute tools discovered via search_tools' gives an explicit workflow trigger and names the upstream step that must precede it, which is real guidance. It offers no when-not-use condition and never contrasts with plan_query, so it stops short of the top band.

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

plan_queryPlan QueryA
Read-onlyIdempotent

Plan which sources answer a question that may span several agencies.

Use for: the first call on a substantive question ("How have rents and interest rates moved in Calgary since 2020?"). Returns the topics it touches, the tools to call for each in order, local portals for any province or city named, and caveats on combining them. Then run the steps with call_tool. lang is accepted for consistency; the plan text is English. Keywords: plan, which data source, where to find, combine sources, cross-source, question, research, Canada data. Mots-clés : planifier, quelle source de données, où trouver, combiner des sources, question, recherche, données canadiennes, statistiques.

ParametersJSON Schema
NameRequiredDescriptionDefault
langNoen
questionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
placesYes
topicsYesBest match first; at most 4.
guidanceYes
questionYes
provenanceYesWhere a result came from and how fresh/complete it is. Embedded in every module's response models (composition, not inheritance) so a tool can return `MyResult(provenance=..., ...)` without fighting Pydantic's model-inheritance rules for extra fields.
fallback_stepsYesOnly when no topic matched.

TDQS

A4/5.0
Behavior4/5

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

Annotations already establish read-only, idempotent, non-destructive, closed-world behavior, so the bar is lower. The description adds genuine value beyond that: what the plan returns (topics, ordered tool calls, local portals, combination caveats) and the non-obvious note that "lang is accepted for consistency; the plan text is English" — a real behavioral quirk the schema alone does not reveal.

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

Conciseness3/5

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

The core guidance is well front-loaded and earn its place, but the trailing keyword and Mots-clés blocks are length padding that restates the same concepts in two languages. Useful for search_tools discovery, but they dilute the definition's structure.

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

Completeness4/5

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

An output schema exists, so return values needn't be enumerated, yet the description helpfully previews what the plan contains. Combined with the usage context and the call_tool handoff, an agent has nearly everything it needs; only the question parameter's expected format is left implicit.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must carry the load. It clarifies the lang parameter's actual effect (accepted for consistency, output stays English) and illustrates the question parameter with a sample, but never describes the expected form or scope of question beyond the example. Partial compensation only.

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?

States a specific verb (plan) and resource (which sources answer a question), and explicitly scopes it to cross-agency questions. It distinguishes itself from siblings by naming call_tool as the follow-up executor, so an agent can tell it apart from search_tools and call_tool without opening any schema.

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

Usage Guidelines4/5

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

Explicitly says when to use it ("the first call on a substantive question") and gives a concrete example, plus tells the agent what to do next ("run the steps with call_tool"). It lacks an explicit when-not clause, e.g. routing simple single-source lookups away from this tool, so it falls short of a 5.

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

search_toolsSearch ToolsA
Read-onlyIdempotent

Search for tools using natural language.

Returns matching tool definitions ranked by relevance, in the same format as list_tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesNatural language query to search for tools

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is well covered. The description adds that results are ranked by relevance and returned in the same format as list_tools, which is useful behavioral context beyond the annotations.

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?

The description is two short sentences with no wasted words, and it front-loads the core purpose before describing the return behavior. Every sentence contributes to understanding how to invoke or interpret the tool.

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 a simple one-parameter search tool with rich annotations and an existing output schema, the description covers what an agent needs: purpose, query style, and return shape. No critical invocation or interpretation detail is missing.

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

Parameters3/5

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

There is exactly one parameter, and schema description coverage is 100%, so the schema already fully documents the natural-language query input. The description does not add syntax, format, or constraint details beyond what the schema provides, making the baseline 3 appropriate.

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

Purpose4/5

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

The description states a specific verb and resource—searching for tools—and clarifies that results are matching tool definitions ranked by relevance. It is clear what the tool does, but it does not distinguish itself from siblings call_tool or plan_query.

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

Usage Guidelines3/5

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

The phrase 'Search for tools using natural language' implies the use case, but there is no explicit when-to-use, when-not-to-use, or alternative routing guidance. An agent can infer that this is for discovery, but it receives no direct help in choosing between this and call_tool or plan_query.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 3 tool updatesv0.1.0
    • First observedcall_tool
    • First observedplan_query
    • First observedsearch_tools

TDQS

A3.9/5.0

Scored across 3 tools

Disambiguation4/5

The three tools have distinct primary purposes: plan_query orchestrates multi-source questions, search_tools discovers tools, and call_tool executes them. However, plan_query also returns tools to call, which could overlap with search_tools for simple discovery, creating minor ambiguity.

Naming Consistency5/5

All names use snake_case and follow a consistent verb_noun pattern (call_tool, search_tools, plan_query), making them predictable and readable.

Tool Count5/5

With only 3 tools, the server is minimal but appropriate for a meta-orchestration layer; each tool (plan, search, call) is essential to the workflow, and no tool feels redundant.

Completeness4/5

The surface covers the core lifecycle of planning, discovering, and executing tools. A direct 'list all tools' operation is missing, but search_tools with a broad query can substitute, so there's no hard dead end.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers