{
  "markdown": "# FairePlace — Public MCP Server 🏠🇫🇷\n\n[![MCP Registry](https://img.shields.io/badge/MCP%20Registry-com.faireplace%2Fpublic--tools-blue)](https://registry.modelcontextprotocol.io/v0/servers?search=faireplace)\n[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](./LICENSE)\n[![Transport: Streamable HTTP](https://img.shields.io/badge/transport-Streamable%20HTTP-orange)](https://mcp.faireplace.com/mcp)\n[![Auth: none](https://img.shields.io/badge/auth-none-lightgrey)](https://mcp.faireplace.com/mcp)\n\nA **public, no-auth, remote MCP server** that exposes [FairePlace](https://faireplace.com)'s free **French residential rental** tools to AI agents (ChatGPT, Claude, Perplexity, Cursor…): create & **e-sign a lease** (bail), check **rent control**, revise rent (**IRL**), compute a **security deposit** or **rental yield**, get an **address risk** report, and generate **rental documents** (rent receipts, inventory, notices, and more).\n\n> **Zero LLM inference server-side.** The server is a thin, deterministic proxy over FairePlace's public API — the *calling* agent pays for its own inference; FairePlace only runs Rust/Typst logic. Marginal cost ≈ 0.\n\n**Endpoint:** `https://mcp.faireplace.com/mcp` · **Registry:** `com.faireplace/public-tools`\n\n---\n\n## Quick start\n\nAdd the remote server to any MCP client:\n\n| Client | How |\n|---|---|\n| **Claude** (Desktop / claude.ai) | Settings → Connectors → Add custom connector → `https://mcp.faireplace.com/mcp` |\n| **Cursor** | Settings → MCP → Add → Streamable HTTP → `https://mcp.faireplace.com/mcp` |\n| **ChatGPT** (Custom GPT) | Import the OpenAPI at `https://mcp.faireplace.com/openapi.json` as an Action (auth: none) |\n| **MCP Inspector** | `npx @modelcontextprotocol/inspector@latest` → connect to the URL |\n\nNo API key, no account. Ask your agent things like *\"Check if a 1500 €/month rent is legal at 75001 Paris for a 45 m² 2-room\"* or *\"Create a furnished lease for a flat in Paris at 850 €\"*.\n\n## Tools (21)\n\n**Data & compliance** (return JSON):\n\n| Tool | Purpose |\n|---|---|\n| `check_rent_control` | Rent control verdict for an address (encadrement des loyers) |\n| `get_reference_rent` | Reference rent (€/m²) for a rent-controlled quarter |\n| `simulate_irl` / `simulate_irl_by_quarters` | Annual rent revision (IRL), explicit or server-resolved INSEE values |\n| `calculate_deposit_restitution` | Security-deposit cap, restitution deadline, penalties |\n| `simulate_rental_yield` | Gross/net yield + per-regime taxation (LMNP, micro-foncier…) |\n| `check_address_risks` | Natural/technological risk report (Géorisques) |\n\n**Lease creation** (the conversion tool):\n\n| Tool | Purpose |\n|---|---|\n| `create_lease_draft` | Create a lease draft → returns a link to finalize & **e-sign** it (advanced eIDAS, PAdES-B-LT) on FairePlace |\n\n**Document generation** (return a link that renders the PDF): `generate_quittance`, `generate_etat_des_lieux`, `generate_conge`, `generate_cautionnement`, `generate_avenant`, `generate_resiliation_amiable`, `generate_relance_impaye`, `generate_inventaire_mobilier`, `generate_notice_information`, `generate_reparations_locatives`, `generate_grille_vetuste`, `generate_charges_recuperables`, `generate_bordereau_restitution`.\n\n## How the lease → signature flow works\n\n```\nagent → create_lease_draft(owner, logement, lease)\n      → FairePlace stores an anonymous draft, returns draft_token\n      → tool returns  https://mcp.faireplace.com/r?draft_token=…\nuser clicks the link\n      → GET /r sets the draft_token cookie on .faireplace.com, 302 → app sign-up\n      → on login, FairePlace ingests the draft and opens it on the Signature step\n```\n\nThe server never hands back a signable document — signature stays behind FairePlace auth. Every link carries `utm_source=mcp` for attribution.\n\n## Architecture\n\nIntentionally a **thin adapter** — not a domain application. All business logic (rent-control data, IRL indices, legal document rendering) lives in FairePlace's Rust backend; this Worker only maps MCP tool calls to the public `/public/tools/*` HTTP endpoints and formats results.\n\n- **Runtime:** Cloudflare Worker (`McpAgent`, Durable Object for session state).\n- **Transport:** Streamable HTTP on `/mcp`.\n- **Guardrail:** native per-IP rate limit (100 req / 60 s).\n- **PDF delivery:** `/pdf/<slug>?p=<base64url payload>` serves an HTML page that fetches the PDF **browser-side** (avoids a same-zone Worker→origin block; no storage — the PDF is a local blob).\n\n### Endpoints\n\n| Path | Purpose |\n|---|---|\n| `/mcp` | MCP server (Streamable HTTP) |\n| `/openapi.json` | Curated OpenAPI 3.1 for GPT Actions |\n| `/.well-known/ai-plugin.json` | Plugin manifest |\n| `/llms.txt` | Passive AI discovery |\n| `/r` | Draft-resume → sets cookie → sign-up |\n| `/pdf/<slug>` | On-demand PDF rendering (browser-side) |\n\n## Development\n\n```bash\nnpm install\nnpm run typecheck\nnpm run dev            # wrangler dev (local)\nnpm run inspect        # MCP Inspector\nnpm run deploy         # wrangler deploy (needs Cloudflare auth)\n```\n\nConfig lives in `wrangler.jsonc` (`vars`: `API_BASE`, `WEB_BASE`, `SELF_BASE`, `DRAFT_REPRISE_URL`, `APP_SIGNUP_URL`).\n\n## Discoverability\n\n- **Official MCP Registry:** [`com.faireplace/public-tools`](https://registry.modelcontextprotocol.io/v0/servers?search=faireplace)\n- **Glama:** [connector `com.faireplace/public-tools`](https://glama.ai/mcp/connectors/com.faireplace/public-tools)\n\n## License\n\n[MIT](./LICENSE) © 2026 FairePlace (Thinkylab SAS). Not legal advice — an aid for French rental workflows.\n",
  "bytes": 5530,
  "sha": "e4887ed22077b643841e233286fe7876c372d58a1292bf17a7d9173bbd5c9bd4",
  "repo_slug": "ykarmouta/faireplace-public-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_com_faireplace_public_tools_0bbbd2e0/readme"
}