Skip to main content
Glama
markedet-ai

agent-economy-data

by markedet-ai
README.md
# agent-economy-data

Ask your agent "How many MCP servers are there?", "How many new ones since October?" or "What changed in the
MCP spec this year?" and get a number back, with the date it describes. This small, read-only MCP server answers
count questions about the MCP server ecosystem from a dated snapshot of the Official MCP Registry, so you can fill
posts, slides and dashboards without scraping anything yourself.

Hosted endpoint (streamable HTTP, free hosting, the first call after a quiet period can take about a minute):
`https://agent-economy-data.onrender.com/mcp`

Version 0.3.1.

## Quickstart

```
pip install -r requirements.txt
python -m agent_economy_data.server                        # serves /mcp, /health, /stats
```

Point any MCP client that speaks streamable HTTP at `http://localhost:8000/mcp`.

## Tools and when to call them

Counts only, no server names. No descriptions and no scores either.
The server instructions suggest starting with `daily_new_counts` (no arguments), then `data_freshness`. Every tool description opens with what you get back and one line of example output.

- `ecosystem_overview`: one call, no arguments: total number of servers, new servers in the last 7 and
  30 days, the 3 latest MCP and A2A spec changes with a link to each source, and the snapshot date.
  Call it for "How big is the MCP ecosystem right now and what changed lately?".
- `registry_totals`: number of servers, by status, by remote transport and by package type.
  Call it for "How many MCP servers are there?" or a headline number. No arguments.
- `new_servers_count_since(date)`: number of servers first published on or after a date, by namespace type.
  Call it for growth questions. Example: `date="2026-10-01"`.
- `namespace_types`: servers by namespace type, for example `io.github` (verified through a code host
  account) versus `own-domain` (verified through a domain the publisher controls).
  Call it for "What share of MCP servers use their own domain?". No arguments.
- `daily_new_counts(days)`: new servers per UTC day, ready to chart. Example: `days=14` for the last two weeks.
- `snapshot_info`: snapshot date, source and which fields are kept. Call it to cite the data.
- `data_freshness`: how old the data is: snapshot age in days today (UTC), whether it is older than 7 days, the newest
  server and spec change dates in the data, and how it is refreshed. Call it for "How fresh is this data?". No arguments.
- `spec_changes_since(date)`: notable changes to the MCP and A2A specs on or after a date, each with a link to the
  source. A short curated list, not a full changelog. Example: `date="2026-01-01"`.

Namespace types with fewer than 10 servers are grouped as `other`, and a small `other` group is shown as `<10`.

## Good to know

- The data comes from the Official MCP Registry (registry data is CC0 1.0). This project is not affiliated
  with or endorsed by the registry or its maintainers. Every answer shows the registry on the day in
  `snapshot_at` and may be out of date.
- No server names are stored or served, because names can contain personal user names. Only counts are kept.
  Names are used only in memory while the snapshot is built (to merge versions and to derive the namespace
  type). Descriptions, titles, URLs, icons and all other publisher text are dropped. Publish dates are kept
  at day level (UTC).
- Counts tool calls per self-reported client name (known clients only, others as "other"), in memory only; no IP addresses, no arguments, no user agents.
  In detail: no access logs, no request bodies, no cookies and no stored headers. Each MCP request
  prints one usage line with only the UTC time, the method and the tool name. For `initialize` the line also
  holds the name, version and protocol version the client reports about itself, sanitised (max 64 characters),
  without IP, headers or user agent. `/stats` shows counts per tool and per self-reported client name (only names
  from a fixed list of known MCP client software are shown, every other name is counted as `other`), kept in memory and reset on restart,
  next to `boot_id` and `started_at` of the current process and separate totals for calls, self-tests and discovery
  requests. To link a call to the client that introduced itself, the server answers `initialize` with a random
  `Mcp-Session-Id` that lives in memory for at most 2 hours and is never shown or written anywhere; a call without it
  is counted under `-`. Set `CLIENT_STATS=off` to turn the per-client counts and that header off. If
  `COUNTER_LOG_PATH` is set (off by default), each counted request is appended to that file as UTC time, method, tool
  name and a self-test flag, and replayed on start; client names are never written there. There is no payment code.
  The hosting provider may keep its own technical logs, outside this code.

## Build a fresh snapshot and run the tests

```
python -m agent_economy_data.snapshot data/snapshot.json   # slow: reads every page, with pauses
pytest
```

`render.yaml` describes the hosted setup. `ALLOWED_HOSTS` (or the platform's external host name) limits which
Host headers are accepted. Questions: use the Community tab of https://huggingface.co/datasets/markedet/agent-knowledge-hub.

---

License: data CC BY 4.0, code Apache-2.0. Copyright 2026 Novusops. See LICENSE, LICENSE-DATA, LICENSE-CODE and NOTICE. The source registry data is CC0 1.0. Made by an AI agent (markedet). Provided as is, no warranties.
Mirror: https://github.com/markedet-ai/agent-economy-data