# cofinance.land MCP server: a guide for AI agents

You are reading this because you have been pointed at cofinance.land's MCP server, or are deciding whether to connect to it. This page is for you. The page for people is https://cofinance.land/docs/mcp and the full protocol reference is https://cofinance.land/docs/mcp/reference.

## What this server is

A read-only Model Context Protocol server over a hand-curated wiki about financing shared housing in Europe: housing cooperatives, national and regional funding programmes, municipal land, private and foundation capital, and the legal forms that gate them. It is a closed corpus: 318 public pages today, weighted towards Germany, and being extended. Within Germany it goes down to 16 regional and 8 local jurisdictions. Coverage of other jurisdictions varies.

- Endpoint: https://mcp.cofinance.land/mcp
- Transport: Streamable HTTP, request/response only. POST one JSON-RPC 2.0 message per request. No SSE, no sessions, no batching.
- Protocol revisions: 2026-07-28 (stateless, server/discover) and 2025-06-18 / 2025-03-26 (initialize handshake). Either works; the era is chosen from each request.
- Authentication: none needed for the free wiki tools. OAuth 2.1 (via the RFC 9728 document at /.well-known/oauth-protected-resource) or an API key (`Authorization: Bearer cfl_live_…`) unlocks the one paid tool.

## The tools and when to use each

Free, anonymous, no cost to anyone:

- wiki_search — ranked keyword search; returns a snippet, the page id, its source URLs and a link per hit. Start here for any question. German spelling is folded (Mietshauser, Mietshaeuser and Mietshäuser all match). A query that names a place re-ranks towards that jurisdiction and says so — a neighbouring Land's programmes are pushed down, not removed, and are marked inline where they appear.
- wiki_get — one page in full by id (e.g. `kfw-134`). An unknown id returns the list of valid ids, so you can correct yourself in one step.
- wiki_get_many — up to eight pages in one round trip, sharing one response budget. Prefer it over repeated wiki_get.
- wiki_list — the whole index, one line per page. With no arguments it returns everything; treat the result as the boundary of what exists here.
- funding_programs — only the funding programmes, freshness first. Highest-churn part of the corpus.
- affordability — Germany only. Turns a group's equity into a purchase-price ceiling, the Kaufnebenkosten line by line at their Land's rate, and an indicative monthly payment. Needs a Land code (`DE-SN`), not a bare `DE`: Grunderwerbsteuer runs 3.5–6.5 % by Land and there is no national rate. Every figure carries its own source and verified-on date; interest and Tilgung are yours to supply and are echoed back labelled as assumptions, never defaulted.
- conflicts — checks whether a proposed set of routes can actually be combined, and which hard eligibility gates an applicant fails. Call it before presenting a capital stack. It reports what it did NOT check; an empty conflict list is not clearance.

Paid, requires a signed-in user or an API key:

- ask_wiki — reads the wiki and writes a grounded prose answer to a natural-language question. Each call spends credits from the user's cofinance.land balance (roughly one chat turn; 1 credit = EUR 0.01) and the cost is appended to the answer. Prefer wiki_search + wiki_get when you can read and reason yourself; use ask_wiki when a question spans several pages or the user wants the synthesis done. Without a credential you get JSON-RPC error -32001 and nothing is charged. Tell the user before calling it that it costs credits.

Filters shared by search/list/programs: `jurisdiction` (ISO country or region code such as DE, DE-SN, EU, CH, NO, ES-CT), `type` (funding-program, legal-topic, entity-form), `legalForms`, `tags`, `limit` (max 25), `offset`. A country filter includes its regions; an EU filter matches EU member states only; an unknown code returns nothing rather than a broadened result.

## Rules for using what comes back

1. An empty result means "this wiki does not cover it yet". It never means "no such funding exists". Say the former to the user. Do not fill the gap from your own training data as if it came from here. Every result now carries this explicitly: a `COVERAGE: FULL | PARTIAL | NONE` line with a one-sentence caveat written to be repeated to the user, and the same verdict in `_meta.coverage`. PARTIAL means something matched but not at the jurisdiction level asked about — say which layer is missing.
1a. If a topic returns a `KNOWN GAP` block: it identifies a route we have confirmed is real but have no page for, with what we can tell you and where to check properly. Pass the gap on as ours, not as a gap in the world.
1b. A `DEGRADED` marker, or an id reported as not found, means part of the answer is missing because something failed rather than because nothing matched. Say so in your answer.
2. Quote the freshness line. Every result states `lastVerified` (a date, or "never verified") and whether the page is `volatile`. Read the date: a 2015 check and a 2026 check are not the same claim. `volatile: false` means nobody flagged it, not that it is stable.
3. Cite the primary source, not us. Each page lists its sources (KfW, the Syndikat, a statute). Point the user there for any figure they will act on.
4. Name the jurisdiction of every programme you mention. Coverage varies by country and region; do not substitute another country's programme for the requested jurisdiction.
5. This is not legal or financial advice. The corpus is bounded and readable in full at https://wiki.cofinance.land; frame answers within its recorded coverage.

## What the corpus contains right now

Counted from the live registry when this page was generated, not typed by hand.

- 318 public pages by jurisdiction: Germany (52), Spain (41), Catalonia (27), Italy (26), Baden-Württemberg (11), Berlin (7), Bremen (6), Hamburg (6), Rhineland-Palatinate (6), Bavaria (5), Mecklenburg-Vorpommern (5), Lower Saxony (5), North Rhine-Westphalia (5), Schleswig-Holstein (5), Brandenburg (4), Saxony (4), Saxony-Anhalt (4), Trento province (4), Hesse (3), Frankfurt (3), Saarland (3), Thuringia (3), Castilla-La Mancha (3), Barcelona city (3), Extremadura (3), La Rioja (3), Lombardy (3), Emilia-Romagna (3), Munich (2), Cologne (2), Leipzig (2), Asturias (2), Castilla y León (2), Galicia (2), Madrid region (2), Navarra (2), EU-wide (2), Friuli Venezia Giulia (2), Liguria (2), Campania (2), Puglia (2), Sicily (2), Switzerland (1), Freiburg (1), Heidelberg (1), Tübingen (1), Dresden (1), Andalusia (1), Aragón (1), Zaragoza (1), Cantabria (1), Ceuta (1), Canary Islands (1), Barcelona province (1), Manresa (1), Palamós (1), Lleida city (1), Balearic Islands (1), Murcia (1), Madrid city (1), Melilla (1), Basque Country (1), Vitoria-Gasteiz (1), Comunitat Valenciana (1), Piedmont (1), Valle d'Aosta (1), Trentino-Alto Adige / South Tyrol (1), Bolzano / South Tyrol province (1), Veneto (1), Tuscany (1), Umbria (1), Marche (1), Lazio (1), Abruzzo (1), Molise (1), Basilicata (1), Calabria (1), Sardinia (1), Norway (1).
- By type: Funding programmes (196), Legal & financing topics (98), Legal entity forms (24).
- Funding programmes on file: 196.
- Pages with a verification date: 316 of 318; oldest recorded check 2015-11-09. Pages flagged volatile: 257.

Anything not listed is not covered yet. Coverage is a work in progress and is being expanded; no country or date is promised.

## Responses you may see

- HTTP 200 with a tool result carrying `isError: true`: the tool ran and could not do what you asked (unknown id, empty question). Read the text and adapt.
- JSON-RPC -32001 (HTTP 200 or 401): the tool needs a credential. For ask_wiki, ask the user to sign in or create an API key at https://cofinance.land/settings.
- HTTP 429 / -32002: rate limited. Anonymous callers share a per-IP bucket of 120 requests an hour; honour Retry-After.
- HTTP 400 / -32022: you sent a protocol version we do not speak. Use 2026-07-28 or 2025-06-18.

## Links

- Human page: https://cofinance.land/docs/mcp
- Full reference: https://cofinance.land/docs/mcp/reference
- This guide as markdown: https://cofinance.land/docs/mcp/agents.md
- llms.txt: https://cofinance.land/llms.txt
- The wiki itself: https://wiki.cofinance.land
- Every tool result links pages as https://wiki.cofinance.land/<FOLDER>/<slug>, e.g. https://wiki.cofinance.land/DE/kfw-134
