Antragio
For operators of AI agents

Antragio as a source for your agent

Antragio collects the public funding programmes of the German federal government, the sixteen states, municipalities and the EU in one place, each with its source, target group, amount, deadline and conditions. This page shows every way an agent can reach that data: over MCP, over a REST API and over a Markdown version of every public page. None of it needs an account or a key.

No keyRead onlyNo personal dataCORS open

Diese Seite auf Deutsch lesen

Connected in a minute

Three common clients, each with the HTTP route and the stdio route. HTTP needs nothing on your machine, stdio needs Node.

Claude Desktop

Put the block into claude_desktop_config.json and restart Claude Desktop. Older versions without a built in HTTP transport use the second variant.

claude_desktop_config.json, over HTTP
{
  "mcpServers": {
    "antragio": {
      "type": "http",
      "url": "https://antragio.com/api/mcp"
    }
  }
}
claude_desktop_config.json, over stdio
{
  "mcpServers": {
    "antragio": {
      "command": "npx",
      "args": ["-y", "@antragio/cli", "mcp"]
    }
  }
}

Claude Code

One command in the project folder. After that the server is available to every session in this project.

over HTTP
claude mcp add --transport http antragio https://antragio.com/api/mcp
over stdio
claude mcp add antragio -- npx -y @antragio/cli mcp

Cursor

The file .cursor/mcp.json in the project, or ~/.cursor/mcp.json for every project.

.cursor/mcp.json, over HTTP
{
  "mcpServers": {
    "antragio": {
      "url": "https://antragio.com/api/mcp"
    }
  }
}
.cursor/mcp.json, over stdio
{
  "mcpServers": {
    "antragio": {
      "command": "npx",
      "args": ["-y", "@antragio/cli", "mcp"]
    }
  }
}

MCP over HTTP

A single endpoint speaking JSON-RPC 2.0 over POST. There is no session, no stream and no subscription: one message in, one message out. Supported are initialize, tools/list, tools/call, ping and the notification notifications/initialized.

Endpoint
https://antragio.com/api/mcp
Protocol version
2025-06-18
Server name
antragio
Tools
6
  • search_programs
  • get_program
  • match_programs
  • list_categories
  • list_regions
  • explain_term
Open the connection: initialize
curl -sS -X POST https://antragio.com/api/mcp \
  -H 'content-type: application/json' \
  -H 'accept: application/json' \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "initialize",
    "params": {
      "protocolVersion": "2025-06-18",
      "capabilities": {},
      "clientInfo": { "name": "mein-agent", "version": "1.0.0" }
    }
  }'
List the tools: tools/list
curl -sS -X POST https://antragio.com/api/mcp \
  -H 'content-type: application/json' \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'
Call a tool: tools/call
curl -sS -X POST https://antragio.com/api/mcp \
  -H 'content-type: application/json' \
  -d '{
    "jsonrpc": "2.0",
    "id": 3,
    "method": "tools/call",
    "params": {
      "name": "search_programs",
      "arguments": {
        "query": "Wärmepumpe",
        "bundesland": "BY",
        "limit": 3
      }
    }
  }'

Older protocol revisions are accepted and echoed back unchanged. Every tool parameter is documented with type and meaning at https://antragio.com/mcp

MCP over stdio, with the CLI

If your client only speaks stdio, a small command line tool sits in between. It talks stdio to your client on one side and to the same HTTP endpoint as above on the other. It stores nothing and needs no key.

Terminal
npx -y @antragio/cli mcp

@antragio/cli is built outside this website and loaded through npx. It is a bridge onto the same public endpoint, so tools, answers and rate limits are identical.

REST API under /api/v1

For everything that does not speak MCP. JSON, no sign in, CORS open, and every answer additionally carries the fields disclaimer and license. If you do not know which filter values are allowed, call /api/v1/categories first.

GET

/api/v1/programs

The list of programmes. Filters for full text (q), category, level, funding type, target group, region and status, plus limit and offset. Filters combine with AND, and an unknown value returns 400 rather than a silently empty list. Nationwide programmes are always included when a region filter is set.

Example
curl -sS "https://antragio.com/api/v1/programs?category=heizung&region=BY&status=aktiv&limit=3"
GET

/api/v1/programs/{slug}

A single programme with all its fields, addressed by the slug from a result list.

Example
curl -sS "https://antragio.com/api/v1/programs/beg-em-heizungsfoerderung"
GET

/api/v1/categories

The complete taxonomy: categories with counts, plus levels, funding types and target groups. The right first call, because afterwards the allowed values of every other endpoint are known.

Example
curl -sS "https://antragio.com/api/v1/categories"
POST

/api/v1/match

Scores a described situation and returns matches with a score, reasons, warnings and a checklist. Stateless: no account, no cookie and no stored case is created. Unknown keys inside answers are dropped.

Example
curl -sS -X POST "https://antragio.com/api/v1/match" \
  -H 'content-type: application/json' \
  -d '{
    "answers": {
      "persona": "privat",
      "bundesland": "BY",
      "vorhaben": ["heizung", "photovoltaik"],
      "eigentum": "eigentuemer",
      "budget": "20_100k"
    },
    "limit": 5
  }'
GET

/api/v1/openapi.json

The description of this API as OpenAPI 3.1. Its enumerated values come from the same registries the endpoints validate against, so the two cannot drift apart.

Example
curl -sS "https://antragio.com/api/v1/openapi.json"

Every page as Markdown

Every public page also exists without navigation and without markup. Append the path of the HTML page to /api/md. Compared to fetching the HTML page this saves most of the tokens and carries the same information.

Pattern
https://antragio.com/api/md/<pfad>
Examples
curl -sS "https://antragio.com/api/md/programm/beg-em-heizungsfoerderung"
curl -sS "https://antragio.com/api/md/foerderung/heizung"
curl -sS "https://antragio.com/api/md/bundesland/bayern"
curl -sS "https://antragio.com/llms.txt"

There are Markdown versions for programme pages, directory pages, topic pages and state pages. Whatever robots.txt blocks does not exist here either, otherwise this route would be a way around our own robots.txt. A trailing .md is swallowed, so both spellings work.

Discovery documents

Anyone who has never heard of Antragio can find the interfaces through these files, without having read any documentation first.

PathContentsFollows
/llms.txtWhat this domain is about, how many programmes there are and where the machine readable versions live. Every number in it is read from the database at request time.llmstxt.org
/.well-known/mcp.jsonDescription of the MCP server: endpoint, supported protocol revisions, tool list, rate limit.own convention
/.well-known/api-catalogA linkset of every interface on this domain, with a pointer to the description and the documentation of each one.RFC 9727
/api/v1/openapi.jsonThe REST API with its parameters, enumerated values, response schemas and error cases.OpenAPI 3.1
/sitemap.xmlEvery indexable URL, as an index over several blocks.sitemaps.org
/.well-known/security.txtWhere to report a security issue.RFC 9116

Rate limits, licence, citation

The limits apply per IP address and are enforced by the very module these numbers are read from. They are deliberately wide enough for an agent in a conversation and too narrow for a full dump of the database.

MCP calls
120 / 5 min
REST calls
300 / 60 min
Results per page
25 … 100

Above the limit the REST API answers with HTTP 429 and a retry-after header, the MCP server additionally with the JSON-RPC error -32000. The headers x-ratelimit-limit, x-ratelimit-remaining and x-ratelimit-reset sit on every REST answer, so a client can slow itself down before it hits the wall.

Licence

Free to use with attribution: Antragio. The data comes from public funding guidelines and is edited by hand. Binding is always the funding body's original source, which travels with every record as sourceUrl.

Please pass on the retrieval time

Funding programmes change constantly: rates get cut, budgets run dry, deadlines move. A statement without a timestamp cannot be checked a few weeks later. Always give your users the retrieval time and the link to the original source.

Pattern for an attribution
Antragio, <programme name>, https://antragio.com/programm/<slug>
retrieved at <ISO 8601 timestamp>, funding body's original source: <sourceUrl>

What Antragio does not do

These boundaries are not politeness, they are section 2 (1) RDG and section 5 StBerG, the German rules on legal and tax services. They live in the code in exactly one place, and they are enforced by the fact that there is no tool at all that files, declares or approves. Pass them on in your system prompt. The binding wording is the German one on /agenten.

We prepare, we check and we accompany. We do not file anything in your name and we do not promise approval.

  • Do not file anything. Tell the user which step they have to take themselves in the funding body's own portal.
  • Do not make any declaration on their behalf, neither a de minimis declaration nor a power of attorney nor an appeal. Name the declaration that is required and who has to sign it.
  • Do not promise approval. The approving authority of the programme decides on its own.
  • Do not state a funding amount as a fixed number. Report the range from the data and say in the same sentence which bonuses and caps are not contained in it.
  • For programmes of the type steuervorteil, tax relief, do not calculate any amount at all. That would be tax advice under section 5 StBerG.
  • The user files the application. Antragio prepares it.

The most common reason for a rejection in Germany is not a missing entitlement but the order of events: ordered first, applied for second. For grants and loans the application has to be filed before the contract is signed. Mention this point first for every programme.

I am slow but thorough. When your agent passes the data on, please always include the source and the retrieval time, and say that the numbers need to be checked against the funding body.