meta-data-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| NVD_API_KEY | No | API key for NVD CVE database (optional, raises rate limits) | |
| OPENAQ_API_KEY | No | API key for OpenAQ (optional, enables authenticated access) | |
| UN_COMTRADE_API_KEY | No | API key for UN Comtrade (optional, enables higher-tier access) | |
| META_DATA_MCP_CONTACT | No | Email used in User-Agent for polite-pool APIs | meta-data-mcp@example.org |
| META_DATA_MCP_PRELOAD | No | Comma-separated plugin ids to activate at startup, or '*' for all (default unset = discovery-only) | |
| OPENSANCTIONS_API_KEY | No | API key for OpenSanctions (optional, enables authenticated access) | |
| COURTLISTENER_API_TOKEN | No | API token for CourtListener (optional, anonymous works at low volumes) | |
| META_DATA_MCP_AUTH_TOKEN | No | Bearer token for SSE transport authentication (optional) | |
| META_DATA_MCP_PROVENANCE | No | Enable provenance entry on tool results; set to truthy value (optional) | |
| META_DATA_MCP_OAUTH_ISSUER | No | Enable OAuth 2.0 Authorization Code + PKCE; set to server's public base URL (optional) |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| opendata_providers_findA | Search the meta-data-mcp plugin registry. Returns plugins that match a free-text query and/or domain/region filters. Use this FIRST when you don't know which plugin can answer a question. If no plugin matches, the response includes a |
| opendata_plugins_createA | Autonomously create a new plugin for this meta-data-mcp server from a YAML spec. Use this when |
| opendata_plugins_draftA | Build a validated YAML plugin spec from structured inputs. Use this BEFORE |
| opendata_explain_choiceA | Explain the scoring breakdown for a provider search. Shows how each provider was ranked using token matching, fuzzy matching, semantic similarity, and metadata filters. |
| opendata_domains_listA | List the controlled domain vocabulary used by the provider registry (e.g. 'health', 'legal', 'finance', 'earth-science'). |
| opendata_regions_listA | List the controlled region vocabulary used by the provider registry (e.g. 'us', 'eu', 'uk', 'global'). |
| opendata_providers_describeA | Fetch the full registry entry for a single provider id — title, description, domains, regions, keywords, homepage, license note, required environment variables. |
| opendata_providers_listA | Enumerate all providers in the opendata-mcp registry (paginated, terse). Returns id, title, domains, regions, and any required env vars per provider. |
| opendata_providers_activateA | Activate a registered provider so its tools become callable in this session. By default the server starts in discovery-only mode — only meta tools (find-providers, list-providers, etc.) are advertised. Activation imports the plugin module and merges its tools into the advertised list, then sends a tools/list_changed notification so the client refetches its catalog. Idempotent. |
| opendata_providers_deactivateA | Remove a previously-activated provider's tools from the session's advertised list. The Python module remains imported (Python caches modules) but its tools no longer appear in tools/list. A tools/list_changed notification is sent so the client refetches. |
| opendata_providers_list_activeA | List the providers currently activated in this session, along with the tool names each contributes. Useful for inspecting why a particular tool is (or isn't) advertised. |
| opendata_health_snapshotA | Snapshot the in-memory provider health registry. Returns a score in [0.0, 1.0] for each requested provider (or every registered provider when called without arguments). Health degrades on recent 5xx / 429 / network failures and decays back toward 1.0 over ~5 minutes; 401/403 are excluded as caller misconfig. The discovery app uses this to paint live health badges next to each search result. |
| opendata_tool_callA | Proxy any activated plugin tool by name. Use this when dynamically activated tools aren't directly callable in your environment. First activate the provider with opendata_providers_activate, then call this tool with the tool name and arguments from the activation response's tool_schemas field. |
| opendata_federate_queryA | Run several plugin tool calls, normalize their results onto a common geography + time axis, and merge them into one cited series. Auto-activates each query's provider. Use this to overlay the same indicator from different open-data sources (e.g. Eurostat vs World Bank) in a single answer. |
| opendata_federate_compareA | Federate several plugin tool calls and report a coverage matrix — which sources cover which geographies and periods — alongside the merged series. Use this to spot gaps or disagreements between open-data sources. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| discover-providers | Ask the LLM to analyze your needs and suggest the best OpenData MCP providers. |
| usecase-financial-research | Analyze economic indicators, exchange rates, and financial markets. |
| usecase-climate-dashboard | Build tools to track weather, climate change, and environmental data. |
| usecase-healthcare-analytics | Track diseases, clinical trials, and public health data. |
| usecase-academic-literature | Search for scholarly articles, preprints, and citations. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| All OpenData Providers | A complete list of all currently registered OpenData MCP providers and their metadata. |
| shape/timeseries/v1 | Time-series shape primitive: line chart + profile panel (min/max/mean/stddev/gaps). Payload: {points: [{date, value, series?}], axes: {x, y}, annotations?}. Loads Plotly from cdn.plot.ly — adopters must allow that origin in the tool's _meta.ui.csp. |
| shape/geofeatures/v1 | GeoFeatures shape primitive (v1): Leaflet map with marker clustering. Payload contract: {features: GeoJSON FeatureCollection | [{lat, lon, attrs}], layers?, facets?}. |
| shape/records/v1 | Records shape primitive: faceted, sortable, paginated table with per-column profile panel. Dependency-free vanilla JS. Payload: {rows, schema?, default_facets?}. |
| app/discovery/v1 | Discovery app: faceted filter, ranked provider list with score breakdown and live health badges, click-to-activate. Wraps opendata_providers_find / list-domains / list-regions / list-active-providers / activate-provider / health-snapshot. Dependency-free vanilla JS. postMessage protocol — host→app: {type: 'tool_result'|'render', id?, tool?, payload}; app→host: {type: 'tool_call', id, name, arguments} (Phase 3 invention; the spec hasn't ratified an app→host shape yet). |
| app/trade-flows/v1 | Bilateral trade-flows app: Sankey (reporter → commodity → partner) + commodity treemap sized by total USD value. Wraps comtrade-trade-data (UN Comtrade). Filters by year, reporter, and commodity. Hover for per-flow detail. D3.js + d3-sankey via CDN. Payload contract: {flows: [{reporter, partner, commodity, value_usd, year?, flow?, ...}]} or raw UN Comtrade {data: [...]} envelope. postMessage protocol — host→app: {type: 'tool_result'|'render', id?, tool?, payload}; app→host: {type: 'tool_call', id, name, arguments} (Phase 3 invention). |
| app/vulnerability/v1 | Vulnerability synthesis app: CVSS v3 radar, KEV exploitation badge, EPSS probability + percentile gauges, and OSV affected-packages table. Wraps nvd-search-cves / nvd-get-cve / nvd-cve-history / cisa-kev-list / cisa-kev-get / osv-get-vulnerability / osv-query-package / epss-scores. Dependency-free vanilla JS + inline SVG. postMessage protocol — host→app: {type: 'tool_result'|'render', id?, tool?, payload}; app→host: {type: 'tool_call', id, name, arguments} (Phase 3 invention). |
| app/entity-graph/v1 | Entity-graph app: force-directed graph of entities and their relationships across four providers — OpenAlex (works/authors), Wikidata (search results), OpenSanctions (persons/companies), Crossref (co-author overlay via crossref-works-by-author). Payload contract: {nodes:[{id,label,type,attrs}], edges:[{source,target,label,weight?}]}. D3.js v7 force layout via CDN; degrades to flat list if D3 blocked. postMessage protocol — host→app: {type: 'tool_result'|'render', id?, tool?, payload}; app→host: {type: 'tool_call', id, name, arguments}. |
| app/museum/v1 | Museum browser app: lazy-loaded image grid of Met Museum objects with click-to-open provenance / artist / date / medium detail panel and a free-text search box. Wraps met-search + met-get-object. Payload contract: {objects: [{id, title, artist, date, medium, image_url, primary_image_url, url, provenance, tags}, ...], facets?: [...]}. Raw {objectIDs: [...]} from met-search is also accepted — the bundle renders an id-only fallback grid. Dependency-free vanilla JS + CSS grid. postMessage protocol — host→app: {type: 'tool_result'|'render', id?, tool?, payload}; app→host: {type: 'tool_call', id, name, arguments} (Phase 3 invention). |
| app/molecular/v1 | Molecular structure app: 3D viewer for proteins (RCSB PDB) and small molecules (PubChem). Renders via 3Dmol.js (BSD-3, CDN-loaded). Cartoon style for chains, stick+sphere for ligands. Wraps pubchem-compound and pdb-entry. postMessage protocol — host→app: {type: 'tool_result'|'render', id?, tool?, payload}; app→host: {type: 'tool_call', id, name, arguments} (Phase 3 invention). Payload envelope: {structure: {format, data?|url?, identifier}, metadata: {name, title, source, attrs}}. |
| app/news-tone/v1 | News-tone app: per-article tone lollipops on a daily-volume timeline, average-tone overlay, and country co-occurrence chord diagram. Wraps gdelt-article-search (events + countries) and gdelt-volume-timeline (tone overlay). Dependency-free vanilla JS + inline SVG. Payload contract — caller may push either a raw GDELT response (sniffed by shape) or a unified envelope {events:[{date,tone,title,country,url}], country_pairs:[{a,b,weight}], facets:{tone_timeline,volume_timeline,query}}. postMessage protocol — host→app: {type: 'tool_result'|'render', id?, tool?, payload}; app→host: {type: 'tool_call', id, name, arguments} (Phase 3 invention). |
| app/network-topology/v1 | Network topology app: force-directed ASN graph with peer / upstream / downstream edges. Wraps ripestat-asn-neighbours, ripestat-asn-neighbours-history (RIPE NCC RIPEstat) and bgpview-asn-peers, bgpview-asn-upstreams, bgpview-asn-downstreams (BGPView, currently offline — binding kept for protocol completeness). Payload contract: {asns: [{asn, name?, country?, rank?}], edges: [{source_asn, target_asn, relationship: peer|upstream|downstream, weight?}], focus_asn?}. D3.js v7 via jsdelivr (only the force layout). postMessage protocol — host→app: {type: 'tool_result'|'render', id?, tool?, payload}; app→host: {type: 'tool_call', id, name, arguments} (Phase 3 invention). |
TDQS
Scored across 15 tools
Every tool serves a distinct purpose: provider discovery vs activation vs health, plugin drafting vs creation, federated query vs comparison. Even the two federate tools are clearly separated by output (merged series vs coverage matrix). No two tools appear to duplicate each other.
The vast majority follow the 'opendata_<resource>_<verb>' pattern (e.g., providers_list, plugins_create, health_snapshot). However, three tools deviate with verb-object order (federate_query, federate_compare, explain_choice), which is a minor inconsistency in an otherwise readable and predictable scheme.
15 tools is at the upper edge of the ideal range but perfectly appropriate for the server's scope: it manages providers, plugins, health monitoring, federation, and vocabulary. Each tool earns its place with a clear role, and none feel redundant or excessive.
The core workflows are well covered: discover providers, activate/deactivate, run federated queries, and create new plugins. The only minor gaps are the absence of an explicit update/delete lifecycle for plugins (though plugin creation is the intended path) and no unregister operation for providers beyond deactivation. These do not prevent typical agent workflows.