CAT
/MCP
SkillsMCPMarketplacesDigestToolsAdvertise

This week in Claude

Every Monday: Claude Code, Agent SDK, MCP, and the Anthropic platform moves worth your time.

Skills by Category
Frontend DevelopmentBackend & APIsTesting & QASecurityDevOps & CI/CDGit & Pull RequestsDocumentationCode Review & QualityAI & Agent BuildingSkill Development
MCP Servers by Category
Sales & MarketingWeb & Browser AutomationDatabasesAI & LLM ToolsCloud & InfrastructureCommunication & MessagingDeveloper ToolsDesign & CreativeDocuments & KnowledgeSearch & Web Crawling
Marketplaces by Category
AI Agents & OrchestrationLLM IntegrationDevelopment ToolsFrontend & UIBackend & APIsDatabasesTesting & Code QualityDevOps & CloudSecurity & ComplianceGit & Version Control

Cross AI Tools

Discover Claude Code plugins, extensions, and tools. Automatically updated directory of Anthropic Claude AI marketplaces with development tools, productivity plugins, and integrations.

Resources

  • Browse Skills
  • Browse MCP Servers
  • Browse Marketplaces
  • Plugins Reference

Community

  • About
  • Tools
  • Feedback
  • Privacy Policy
  • Advertise

Built for the Claude Code community with Claude Code by @mertduzgun

Independent project, not affiliated with Anthropic

Meta Data Mcp

derekslinz/meta-data-mcp
313 toolsSSEregistry active
Summary

This is a single MCP server that bundles 83 open data API plugins and routes your requests automatically. Instead of installing dozens of separate servers, you get one that exposes discovery tools like opendata.providers.find to search the registry by domain, region, or keyword, then activates the matching provider on demand. It covers government datasets, finance, earth science, health, and legal sources. When no plugin exists for your query, the LLM can draft a YAML spec with opendata.plugins.draft and hot-load a new plugin via opendata.plugins.create without restarting the server. Install once with uv, restart Claude Desktop or Cursor, and ask for earthquake data or court rulings without knowing which API to call.

CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
Keep your Mac awake
Keep your Mac awake
Keep your Mac awake while Claude Code and 40+ AI agents run. Sleeps when they're idle.
One time payment $9 →
Context.devContext.dev
Context.dev
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
Make money from your Skills
Make money from your Skills
On Capafy, your Skill runs online 24/7 as an agent product, and you get paid every time someone uses it.
Start earning →
AppSignal
AppSignal
Monitor with ease. Code with confidence.
Start Free Trial →
CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
Keep your Mac awake
Keep your Mac awake
Keep your Mac awake while Claude Code and 40+ AI agents run. Sleeps when they're idle.
One time payment $9 →
Context.devContext.dev
Context.dev
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
Make money from your Skills
Make money from your Skills
On Capafy, your Skill runs online 24/7 as an agent product, and you get paid every time someone uses it.
Start earning →
AppSignal
AppSignal
Monitor with ease. Code with confidence.
Start Free Trial →

Tools

Public tool metadata for what this MCP can expose to an agent.

13 tools
opendata.providers.findSearch 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 `next_step` field that explains how to auto...5 params

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 `next_step` field that explains how to auto...

Parameters* required
limitinteger
Maximum number of providers to return (1-100, default 20).default: 20
queryvalue
Free-text query. Matched against id, title, description, keywords, domains, regions. Tokens with exact keyword hits score higher.
domainvalue
Restrict to providers tagged with this domain (e.g. 'health', 'legal', 'finance'). Use opendata.domains.list to enumerate.
regionvalue
Restrict to providers tagged with this region (e.g. 'us', 'eu', 'uk', 'global'). Use opendata.regions.list to enumerate.
activate_topinteger
If > 0, automatically activate the top-N matching providers so their tools become callable in this session. Default 0 means find-providers is read-only — you must call opendata.providers.activate explicitly to load tools.default: 0
opendata.plugins.createAutonomously create a new plugin for this meta-data-mcp server from a YAML spec. Use this when `opendata.providers.find` returned no match. Recommended flow: first call `opendata.plugins.draft` with structured fields to get a valid YAML spec, then pass it here. The new plugin...6 params

Autonomously create a new plugin for this meta-data-mcp server from a YAML spec. Use this when `opendata.providers.find` returned no match. Recommended flow: first call `opendata.plugins.draft` with structured fields to get a valid YAML spec, then pass it here. The new plugin...

Parameters* required
domainsarray
Registry domains for the new plugin (e.g. ['security']). Use `opendata.domains.list` to see existing values, but new domain names are allowed.
regionsarray
Registry regions for the new plugin (e.g. ['global', 'us']). Use `opendata.regions.list` to see existing values.
keywordsarray
Search keywords that should match this plugin.
spec_yamlstring
Full YAML spec for the new plugin. Must include id, server_name, base_url, description, homepage, and at least one tool. See tools/specs/example_weather_alert.yaml for the canonical form.
license_notestring
Optional short licensing/attribution note for the data source.default:
requires_envarray
Names of any environment variables the new plugin needs (e.g. API keys). Leave empty for keyless APIs.
opendata.plugins.draftBuild a validated YAML plugin spec from structured inputs. Use this BEFORE `opendata.plugins.create` to avoid hand-writing YAML. Validates id format, kebab-case tool names, path-placeholder/param consistency, parameter types, and response format. Returns the YAML string ready...11 params

Build a validated YAML plugin spec from structured inputs. Use this BEFORE `opendata.plugins.create` to avoid hand-writing YAML. Validates id format, kebab-case tool names, path-placeholder/param consistency, parameter types, and response format. Returns the YAML string ready...

Parameters* required
idstring
Plugin id in snake_case, e.g. 'global_nvd_cve'. Becomes the Python module name under meta_data_mcp/providers/.
titlestring
Human-readable title for the registry entry.
toolsarray
At least one tool definition. Each becomes one MCP tool on the server.
domainsarray
Registry domains (e.g. ['security', 'government']).
regionsarray
Registry regions (e.g. ['global', 'us']).
base_urlstring
API base URL with no trailing slash (e.g. 'https://services.nvd.nist.gov').
homepagestring
URL to the API documentation or provider homepage.
keywordsarray
Search keywords that should match this plugin in opendata.providers.find.
descriptionstring
One- or two-sentence description of what this plugin covers.
server_namevalue
kebab-case server name for the plugin registry entry. Defaults to id with underscores replaced by hyphens.
requires_envarray
Names of environment variables this API needs (e.g. ['NVD_API_KEY']).
opendata.explain.choiceExplain the scoring breakdown for a provider search. Shows how each provider was ranked using token matching, fuzzy matching, semantic similarity, and metadata filters.4 params

Explain the scoring breakdown for a provider search. Shows how each provider was ranked using token matching, fuzzy matching, semantic similarity, and metadata filters.

Parameters* required
limitinteger
Number of top providers to explain (1-20, default 5).default: 5
queryvalue
The original search query to explain scoring for.
domainvalue
Domain filter used in search.
regionvalue
Region filter used in search.
opendata.domains.listList the controlled domain vocabulary used by the provider registry (e.g. 'health', 'legal', 'finance', 'earth-science').

List the controlled domain vocabulary used by the provider registry (e.g. 'health', 'legal', 'finance', 'earth-science').

No parameter schema in public metadata yet.

opendata.regions.listList the controlled region vocabulary used by the provider registry (e.g. 'us', 'eu', 'uk', 'global').

List the controlled region vocabulary used by the provider registry (e.g. 'us', 'eu', 'uk', 'global').

No parameter schema in public metadata yet.

opendata.providers.describeFetch the full registry entry for a single provider id — title, description, domains, regions, keywords, homepage, license note, required environment variables.1 params

Fetch the full registry entry for a single provider id — title, description, domains, regions, keywords, homepage, license note, required environment variables.

Parameters* required
provider_idstring
The provider id (e.g. 'us_nasa', 'global_world_bank', 'us_courtlistener').
opendata.providers.listEnumerate all providers in the opendata-mcp registry (paginated, terse). Returns id, title, domains, regions, and any required env vars per provider.2 params

Enumerate all providers in the opendata-mcp registry (paginated, terse). Returns id, title, domains, regions, and any required env vars per provider.

Parameters* required
limitinteger
Maximum number of entries to return (1-200, default 50).default: 50
offsetinteger
Number of entries to skip (default 0).default: 0
opendata.providers.activateActivate 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 advertis...1 params

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 advertis...

Parameters* required
provider_idstring
Provider id to activate (e.g. 'us_data_gov' or 'us-data-gov'). Use opendata.providers.find or opendata.providers.list to discover available ids.
opendata.providers.deactivateRemove 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.1 params

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.

Parameters* required
provider_idstring
Provider id to deactivate.
opendata.providers.list_activeList 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.

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.

No parameter schema in public metadata yet.

opendata.health.snapshotSnapshot 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 a...1 params

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 a...

Parameters* required
provider_idsvalue
Optional list of provider ids to query. When omitted, returns snapshots for every provider in the static + dynamic registry. Providers with no recorded failures default to a fully-healthy baseline (score 1.0).
opendata.tool.callProxy 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 to...2 params

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 to...

Parameters* required
argumentsobject
Arguments to pass to the tool, matching its inputSchema.
tool_namestring
Exact name of an activated plugin tool to call (e.g. 'nvd-search-cves'). Use opendata.providers.activate first, then pass the tool name from its 'tools' list.

meta-data-mcp

A single MCP server that transparently routes user requests to 83 open-data sources.

meta-data-mcp is one MCP server — not many. Under the hood it bundles 83 plugins, each wrapping a different open-data API. The plugins are an implementation detail; from your LLM's perspective there is one server and one place to ask "where can I find data about X?"

You install one server. You get all the data, discoverable through built-in routing tools.

Why "meta"?

Finding open data isn't the hard part — there's an absurd amount of it available. The hard part is finding the right dataset when you need it. meta-data-mcp makes that automatic:

  • The LLM calls opendata_providers_find ("FX rates", "court rulings", "earthquakes near Lisbon") and the server routes the query against an internal registry of every bundled plugin.
  • The LLM then calls the matching tool directly. No setup step in between, no separate servers, no per-provider install rituals.

This project was forked from opendata-mcp and reshaped around the single-server idea once the catalogue passed a few dozen plugins.

Installation

You'll need uv (a Python package manager).

# macOS — install uv via Homebrew so MCP clients can find it
brew install uv

# Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

# Windows (PowerShell)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

Then register the server with every MCP client installed on your machine:

uv run meta-data-mcp setup

The command auto-detects which MCP clients you have installed and adds one meta-data-mcp entry under mcpServers in each. Supported clients:

ClientConfig file
Claude Desktop~/Library/Application Support/Claude/claude_desktop_config.json (macOS) / %APPDATA%/Claude/claude_desktop_config.json (Windows)
Claude Code~/.claude.json
Cursor~/.cursor/mcp.json
Windsurf~/.codeium/windsurf/mcp_config.json
Gemini CLI~/.gemini/settings.json
LM Studio~/.cache/lm-studio/mcp.json

Each existing config is backed up to <file>.bak before writing. Restart the affected client(s) and you'll see one new server with discovery tools available immediately; plugin tools can then be activated on demand.

Inspect what's detected / configured on your machine:

uv run meta-data-mcp clients

Target a single client (or write to every supported client regardless of detection):

uv run meta-data-mcp setup --client claude-code
uv run meta-data-mcp setup --client all

If you want to see the JSON snippet without touching any config file (e.g. to paste into a client we don't support yet):

uv run meta-data-mcp setup --print-json

When META_DATA_MCP_AUTH_TOKEN is set, --print-json also surfaces the SSE-client snippet (with the real token) to stderr so you can wire a remote client.

Hosting meta-data-mcp as a remote SSE server

For deploying behind your own domain with bearer-token authentication, see docs/hosting.md. It covers systemd, Caddy/nginx TLS termination, token rotation, and the threat model.

CLI

There is one server, so the CLI takes no "provider" argument. Every command operates on the one meta-data-mcp server.

CommandWhat it does
uv run meta-data-mcp runRun the server (default SSE; pass --transport stdio for Claude Desktop).
uv run meta-data-mcp setupRegister the server in detected MCP client configs (or one target via --client).
uv run meta-data-mcp removeUnregister the server from detected MCP client configs (or one target via --client).
uv run meta-data-mcp cleanupDetect and remove legacy multi-server entries (--apply to commit).
uv run meta-data-mcp inspectLaunch mcp-inspector against the server.
uv run meta-data-mcp listInformational: list the internal plugins bundled in this server.
uv run meta-data-mcp infoInformational: show server overview. Pass --plugin <name> for plugin-level details.
uv run meta-data-mcp versionPrint the package version.

The list command exists for transparency about what's bundled — plugins are not separately installable, runnable, or addressable. They are loaded automatically when the server starts.

Server tools (what the LLM calls)

Once meta-data-mcp is running, the LLM has access to two layers of tools — and you don't need to mention either to the user:

  1. Meta tools — the 13 server-level tools below. They make routing transparent: the LLM uses them to find, activate, and (if needed) create the right plugin without you telling it which tool to call.
  2. Plugin tools — ~330 tools coming from the 83 bundled plugins. In the default discovery-only mode they are activated per provider at runtime (or preloaded via META_DATA_MCP_PRELOAD). The LLM picks one after consulting the meta tools.

Meta tools

ToolPurpose
opendata_providers_findFree-text search over the plugin registry. Returns ranked matches. When nothing matches the response carries a no_match: true flag and a next_step hint pointing at opendata_plugins_draft + opendata_plugins_create.
opendata_explain_choiceShow the scoring breakdown for a search (useful for debugging routing decisions).
opendata_domains_listEnumerate the controlled domain vocabulary (health, legal, finance, earth-science, …).
opendata_regions_listEnumerate the controlled region vocabulary (us, eu, uk, global, …).
opendata_providers_describeFull metadata for one plugin by id — title, description, domains, regions, keywords, homepage, required env vars.
opendata_providers_listPaginated dump of the whole registry.
opendata_providers_activateActivate one provider so its tools become callable in this session.
opendata_providers_deactivateRemove an activated provider's tools from the current session catalog.
opendata_providers_list_activeList currently active providers and the tool names each contributes.
opendata_health_snapshotReturn per-provider health scores used by discovery health badges and routing context.
opendata_plugins_draftBuild a validated plugin YAML spec from structured inputs. Takes id, base_url, tool definitions (name, endpoint, params), and registry metadata. Validates id/tool-name casing, path-placeholder/param consistency, and parameter types, then emits a YAML string ready to feed into opendata_plugins_create. Use this so the LLM never has to hand-author YAML.
opendata_plugins_createAutonomously create a new plugin. Takes a YAML spec (typically produced by opendata_plugins_draft), runs the generator, imports the new module, registers it in the live registry, and hot-loads its tools onto the running server. Use this when opendata_providers_find returns no match.
opendata_tool_callProxy-call an activated plugin tool by name for environments that cannot directly invoke dynamically added tools.

The autonomous discovery flow

The reason this server is called "meta" is that it routes data requests on the user's behalf — including by creating the route when one doesn't exist yet. The full flow:

  1. User asks for data, e.g. "show me the most recent published CVEs."
  2. LLM calls opendata_providers_find with the query (cve, vulnerability, …).
  3. If the registry has a match: the LLM activates the matching provider (opendata_providers_activate, or activate_top in find) and then calls the plugin tool.
  4. If the registry has no match: the response includes no_match: true and a next_step field that explains the autonomous creation path. The LLM:
    1. Tells the user it's about to add coverage for this data source.
    2. Web-searches for an open API that exposes the requested data (e.g. the NVD or CIRCL CVE API).
    3. Calls opendata_plugins_draft with the API's id, base URL, and structured tool definitions. The server validates the inputs (id casing, path-placeholder consistency, parameter types) and returns a YAML string.
    4. Passes that YAML to opendata_plugins_create. The server materializes the plugin module + tests, imports the module, registers a ProviderEntry in the in-memory dynamic registry, and merges the new tools into the running server's tool list.
    5. Calls the newly-available tool to answer the user's original question.
  5. User gets their answer — and the plugin remains available for the rest of the session.

The materialized plugin lives on disk (meta_data_mcp/providers/{id}.py + tests/providers/test_{id}.py); contributors can clean it up, add it to meta_data_mcp/registry.py as a static entry, and open a PR so it becomes part of every shipped install.

Plugin tools

Every bundled plugin contributes its own tools under the one server. Their names are unique kebab-case identifiers, often using a provider-specific prefix (e.g. usgs-eq-feed-significant-week, frankfurter-latest, wikipedia-fetch-summary). The LLM discovers them through opendata_providers_find/opendata_providers_describe, activates the provider when needed, and can inspect session state with opendata_providers_list_active.

Presentation layer (MCP Apps)

v2.0 adds a visual layer on top of every tool result. Hosts that support the MCP Apps extension (Claude Desktop, MCP Inspector, others) render bound tool results inline as interactive panels in a sandboxed iframe instead of as JSON text. Hosts that don't speak MCP Apps fall back to the same JSON they always got — the binding is purely additive.

Each MCP-Apps-aware tool declares its panel via _meta.ui.resourceUri on the tool description. The host fetches the ui:// resource (HTML + bundled JS, single payload, no external requests besides explicitly-whitelisted CDNs) and dispatches bidirectional postMessage events between the iframe and itself.

Shape primitives — ui://meta-data-mcp/shape/<name>/v1

Three reusable bundles cover the common payload contracts. Any tool whose response matches one of these shapes binds to the corresponding primitive automatically and gets a rich renderer for free.

ShapeRendersPayload contract
timeseries/v1Line chart + auto-computed profile (min/max/mean/stddev/gap-count) via Plotly.{points: [{date, value, series?}], axes: {x, y}, annotations?}
geofeatures/v1Leaflet map + marker cluster (with density layer for high-cardinality outputs).`{features: GeoJSON
records/v1Faceted, sortable, paginated HTML table + per-column auto-profile (type inference, top-k, null rate, range).{rows: [...], schema?, default_facets?}

Custom apps — ui://meta-data-mcp/app/<name>/v1

Some data shapes don't fit a generic primitive. v2.0 ships dedicated apps for them:

AppDrivesVisualization
discovery/v1opendata_providers_find, opendata_domains_list, opendata_regions_list, opendata_providers_activate, etc.Faceted plugin browser with live health badges.
vulnerability/v1nvd-*, osv-*, epss-*, cisa-kev.CVSS radar + severity heatmap + exploitation-probability gauge.
entity-graph/v1crossref-works-by-author, openalex-search-works, wikidata-search-entities, opensanctions-search.Force-directed graph (D3) with co-authorship overlay.
trade-flows/v1comtrade-trade-data.Reporter → commodity → partner Sankey + commodity treemap.
news-tone/v1gdelt-article-search, gdelt-volume-timeline.Volume + tone timeline with country-pair chord diagram.
network-topology/v1ripestat-asn-neighbours and friends.Force-directed ASN peering/upstream/downstream graph.
molecular/v1pubchem-compound, pdb-entry.WebGL 3D structure viewer (3Dmol.js, cartoon for proteins, stick+sphere for ligands).
museum/v1met-search, met-search-by-artist, met-get-object.Lazy-loaded CSS-grid image gallery + provenance detail panel.

Building new apps

Adding a UI binding to a generated provider is now a one-line spec change:

tools:
  - name: my-tool
    description: ...
    endpoint: /foo
    response_shape: records   # ← binds to the shape primitive

See tools/specs/README.md for the full reference. Bundle-size budgets are enforced in CI (warn ≥ 100 KB, error ≥ 1 MB); the v2.0 bundles range from 14 KB (timeseries primitive) to 34 KB (vulnerability app), all comfortably inside the budget.

Bundled plugins (83)

This is what's inside the one server. You don't install these individually — they all come along.

Government / Civic

PluginSourceDescription
au_data_govAustralian Government Open DataCKAN catalog at data.gov.au
ca_open_govCanada Open DataCKAN catalog at open.canada.ca
fr_data_gouvdata.gouv.frFrench government open data platform
nl_tweedekamerTweede KamerDutch Parliament open data
sg_data_govSingapore Open Datadata.gov.sg datasets and collections
uk_govdata.gov.ukUK government CKAN catalog
us_caryTown of Cary Open DataTown of Cary, NC open data via Socrata — public safety, transportation, utilities, parks
us_data_govData.govUS federal government open datasets
us_fayettevilleCity of Fayetteville Open DataCity of Fayetteville, NC open data via Socrata — public safety, infrastructure, community services
us_raleighCity of Raleigh Open DataCity of Raleigh open data via Socrata — public safety, infrastructure, parks, planning

Statistics / Economics

PluginSourceDescription
eu_eurostatEurostatEuropean Union statistics
global_imfInternational Monetary FundIMF SDMX 2.1 statistical data
global_faostatFAOSTATUN food and agriculture statistics — production, prices, trade, land use, emissions
global_dbnomicsDBnomicsGlobal economic data aggregator (IMF, World Bank, etc.)
global_oecdOECDOECD economic & social statistics (SDMX)
global_world_bankWorld BankDevelopment indicators by country
nl_cbsStatistics Netherlands (CBS)Dutch statistical datasets (OData v2/v3)
uk_onsUK ONSUK Office for National Statistics

Finance / Markets

PluginSourceDescription
eu_ecbEuropean Central BankECB data portal (SDMX) — FX, monetary, banking
global_coingeckoCoinGeckoCryptocurrency market data
global_frankfurterFrankfurterECB reference FX rates (key-less)
us_sec_edgarSEC EDGARPublic company filings, XBRL financials
us_treasury_fiscalUS Treasury Fiscal DataFederal debt, daily Treasury statement, FX rates

Health & Life Sciences

PluginSourceDescription
global_disease_shdisease.shCOVID-19, influenza, vaccine aggregator
global_pubchemNCBI PubChemChemical compounds and substances
global_rcsb_pdbRCSB PDB3D protein and macromolecular structures
global_who_ghoWHO GHOWHO Global Health Observatory (OData)
us_cdc_socrataUS CDCCDC open data via Socrata
us_clinicaltrialsClinicalTrials.govNIH/NLM clinical trials registry v2
us_fda_openfdaopenFDAFDA adverse events, recalls, labels
us_healthdata_govHealthData.govHHS open health data via Socrata — outcomes, insurance, demographics, public health

Earth Science / Weather / Environment

PluginSourceDescription
eu_copernicusCopernicus (EU)European Earth observation and climate datasets
global_open_meteoOpen-MeteoWeather forecast + historical + air quality
global_openaqOpenAQGlobal air-quality measurements from reference monitors and sensors
us_ncdeq_gisNC DEQ Environmental GISNC Dept. of Environmental Quality ArcGIS Hub — permits, air/water quality, hazardous waste
us_noaa_nceiNOAA NCEIClimate data access services (key-less)
us_noaa_tidesNOAA Tides & CurrentsWater levels, tides, currents
us_usgs_earthquakeUSGS EarthquakesReal-time and historical seismic events

Biodiversity / Space / Physics

PluginSourceDescription
cern_opendataCERN Open DataParticle physics datasets and software
global_gbifGBIFGlobal biodiversity occurrence records
global_inaturalistiNaturalistCitizen-science species observations
global_openskyOpenSky NetworkLive ADS-B flight tracking
us_nasaNASAAPOD, Near Earth Objects, Mars rover photos

Geo / Mapping / Knowledge

PluginSourceDescription
global_mcp_registryMCP Server RegistryOfficial MCP server registry — search and list published MCP servers
global_osm_nominatimOSM NominatimGeocoding / reverse-geocoding (1 req/sec)
global_overpassOSM OverpassQuery OpenStreetMap with Overpass QL
global_rest_countriesREST CountriesCountry reference data — borders, capitals, currencies, languages, populations
global_wikidataWikidataStructured knowledge graph + SPARQL
global_wikipediaWikipediaArticle summaries, related, page views
us_arcgis_itemArcGIS REST APIFetch public ArcGIS item metadata by ID — layers, maps, services, files
us_census_geocoderUS Census GeocoderAddress ⇄ coordinates ⇄ geographies
us_nc_onemapNC OneMapNC's authoritative GIS clearinghouse via ArcGIS REST — statewide geographic layers

Agriculture / Trade

PluginSourceDescription
global_un_comtradeUN ComtradeInternational merchandise and services trade statistics

Security / Vulnerability

PluginSourceDescription
eu_euvdENISA EUVDLatest, exploited, critical, and filtered EU vulnerability search
global_circl_cveCIRCL CVE SearchRecent CVEs, CVE details, and vendor/product browsing
global_crtshcrt.shCertificate transparency search for domains and certificates
global_epssFIRST.org EPSSExploit prediction scores and percentile ranks for CVEs
global_nvd_cveNVD CVE DatabaseNIST CVE records, filters, and change history
global_opensanctionsOpenSanctionsSanctions, PEP, debarment, and related risk datasets
global_osv_devOSV.devOpen source vulnerability advisories across ecosystems
global_pwned_passwordsPwned PasswordsAnonymous breached-password SHA-1 prefix lookups
global_ssllabsSSL LabsPublic TLS configuration and endpoint analysis
us_cisa_kevCISA KEVKnown Exploited Vulnerabilities catalog with remediation deadlines

Transit / Aviation

PluginSourceDescription
ch_sbbSwiss Federal RailwaysSwiss train disruptions and service data
de_dbDeutsche BahnGerman railway open data
nl_ndovNDOV LoketDutch public transport data
us_faa_nasstatusFAA NAS StatusUS airspace status, delays, ground stops (XML)
us_noaa_awcNOAA Aviation WeatherMETAR, TAF, and station weather data

Scholarly Literature

PluginSourceDescription
global_arxivarXivPreprint metadata (Atom XML)
global_crossrefCrossrefDOI metadata, citations, journals
global_doajDOAJOpen-access journal and article search
global_europepmcEurope PMCBiomedical literature + fulltext XML
global_openalexOpenAlexOpen scholarly metadata

Culture / Books

PluginSourceDescription
global_met_museumMet MuseumMet Museum Open Access (CC0)
global_open_libraryOpen LibraryBooks, authors, works (Internet Archive)
global_unesco_heritageUNESCO World Heritage SitesNatural, cultural & mixed World Heritage Sites

News / Media

PluginSourceDescription
global_gdeltGDELT 2.0Global news, event, and tone monitoring across 100+ languages

Networking / Internet

PluginSourceDescription
global_bgpviewBGPViewBGP routing data — ASN info, prefixes, peers (key-less)
global_ripe_statRIPE NCC RIPEstatProduction-grade BGP data (key-less)

Legal

PluginSourceDescription
nl_rechtspraakDutch RechtspraakDutch court rulings and case law (ECLI)
uk_legislationUK legislation.gov.ukUK Acts, statutory instruments (XML/Atom)
us_courtlistenerCourtListenerUS court opinions, dockets, judges (Free Law Project)
us_federal_registerUS Federal RegisterDaily rules, notices, executive orders

Optional environment variables

A few bundled plugins accept optional API keys for higher rate limits. Set these in your shell or in the Claude Desktop server config's env block:

VariablePluginPurpose
COURTLISTENER_API_TOKENus_courtlistenerAnonymous access works at low volumes
NVD_API_KEYglobal_nvd_cveRaises NVD API rate limits
META_DATA_MCP_CONTACTallYour email, used in User-Agent for polite-pool APIs (Crossref, OpenAlex, OSM, SEC EDGAR). Defaults to meta-data-mcp@example.org.
OPENAQ_API_KEYglobal_openaqEnables authenticated OpenAQ API access
OPENSANCTIONS_API_KEYglobal_opensanctionsEnables authenticated OpenSanctions API access
UN_COMTRADE_API_KEYglobal_un_comtradeEnables higher-tier UN Comtrade API access

Server runtime flags

VariablePurpose
META_DATA_MCP_PRELOADComma-separated plugin ids to activate at startup, or * for all. Default unset = discovery-only (~13 meta tools).
META_DATA_MCP_AUTH_TOKENWhen set on the SSE transport, requires Authorization: Bearer <token> on /sse and /messages.
META_DATA_MCP_OAUTH_ISSUEREnable OAuth 2.0 Authorization Code + PKCE. Set to the server's public base URL (e.g. http://localhost:8000). Mounts /.well-known/oauth-authorization-server, /register, /authorize, /token, /revoke, and a consent page at /oauth/consent. Coexists with META_DATA_MCP_AUTH_TOKEN — both auth methods remain valid simultaneously.
META_DATA_MCP_OAUTH_MAX_CLIENTSMaximum number of registered OAuth clients kept in memory. Default 1000. Must be a positive integer; invalid values fall back to the default.
META_DATA_MCP_OAUTH_TOKEN_TTLOAuth access-token lifetime in seconds. Default 3600 (1 hour). Must be a positive integer; invalid values fall back to the default.
META_DATA_MCP_PROVENANCETruthy (1, true, yes, on) enables a meta-data-mcp/provenance entry on every tool-call result's first content block's _meta, carrying sha256 and timestamp (ISO 8601 UTC, ms precision). The digest covers the canonical (tool, arguments, content) envelope — content blocks dumped via model_dump(mode="json", by_alias=True, exclude_none=True) with _meta stripped, JSON-serialized with sort_keys=True, separators=(",",":"), ensure_ascii=True. Binding tool name + arguments into the hash means audit logs can distinguish "tool A returned X" from "tool B returned X". Default off — opt in when you need tamper-evidence. See meta_data_mcp/provenance.py module docstring for the verbatim receiver recipe.

Transports

run defaults to SSE (HTTP, port 8000) so you can connect from the MCP Inspector or remote clients. For Claude Desktop (which the setup command targets), the spawned process uses stdio:

uv run meta-data-mcp run                                  # SSE on 127.0.0.1:8000
uv run meta-data-mcp run --transport stdio                # stdio
uv run meta-data-mcp run --host 0.0.0.0 --port 3001       # SSE bound to all interfaces

Roadmap

Shipped

  • Hierarchical discovery (v2.0): opendata_providers_find with ranked scoring replaces the originally-planned browse/list tools.
  • Agent-driven generation (v2.1): opendata_plugins_draft + opendata_plugins_create let the model close coverage gaps autonomously. Hardened in v2.1.1 with input allowlists, path containment, and a post-generation AST validator (14 RCE/path-traversal/bypass paths closed).
  • Self-hosted SSE deployment (v2.1): bearer-auth-protected, systemd-managed, reverse-proxied.
  • Multi-language SDK (v2.2): Python embedded client (meta_data_mcp.sdk) and TypeScript/Node client (@meta-data-mcp/sdk) for discovery over MCP SSE.
  • OAuth 2.0 (v2.3): Authorization Code + PKCE + Dynamic Client Registration. Works with Claude.ai (StreamableHTTP) and MCP Inspector. /.well-known/oauth-authorization-server, /.well-known/oauth-protected-resource, and /.well-known/openid-configuration all served.
  • MCP registry provider (v2.3.4): mcp_registry_search and mcp_registry_list — discover other MCP servers from within meta-data-mcp. Listed on the official MCP registry and Smithery.

Still ahead

  • Expand provider coverage beyond the current 83.

Credits

  • Originally conceived by grll as opendata-mcp.
  • Forked and reshaped around the single-server "meta-mcp" model.
  • Built on Anthropic's open-source MCP spec.

License

MIT — see LICENSE.

Featured
CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
Keep your Mac awake
Keep your Mac awake
Keep your Mac awake while Claude Code and 40+ AI agents run. Sleeps when they're idle.
One time payment $9 →
Context.devContext.dev
Context.dev
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
Make money from your Skills
Make money from your Skills
On Capafy, your Skill runs online 24/7 as an agent product, and you get paid every time someone uses it.
Start earning →
AppSignal
AppSignal
Monitor with ease. Code with confidence.
Start Free Trial →
Categories
Data & Analytics
Registryactive
Packagemeta-data-mcp
TransportSSE
UpdatedMay 22, 2026
View on GitHub

Related Data & Analytics MCP Servers

View all →
Google Sheets

com.mcparmory/google-sheets

Create, read, and modify spreadsheet data, formatting, and sheets
25
Google Sheets

domdomegg/google-sheets-mcp

Allow AI systems to read, write, and query spreadsheet data via Google Sheets.
2
Google Sheets Mcp

henilcalagiya/google-sheets-mcp

Powerful tools for automating Google Sheets using Model Context Protocol (MCP)
14
Futuristic Risk Intelligence

cct15/war-dashboard-data

Geopolitical conflict risk, political events, and maritime traffic data for AI agents
1
Mcp Google Sheets Full

moooonad/mcp-google-sheets-full

Full Google Sheets MCP: 26 tools + run_sheets_script escape hatch. User OAuth, no service account.
CSV to JSON API

io.github.br0ski777/csv-to-json

Parse CSV to JSON array. Auto-detect delimiter, headers. x402 micropayment.