Skip to main content
Glama
benjammartin

RemplirPDF MCP server

by benjammartin

RemplirPDF MCP server

Let your AI agent prepare French rental documents: furnished and unfurnished leases, inventories (état des lieux), rent receipts (quittances), rent notices, guarantor deeds, notices to quit and certificates. The agent picks the right template, asks you for the missing details, and generates the filled PDF in your RemplirPDF account, with the legal clauses already written.

Serveur MCP de RemplirPDF : votre assistant IA prépare bail, état des lieux, quittance de loyer et attestations en PDF rempli, avec les clauses légales déjà rédigées. Documentation en français : https://remplirpdf.fr/mcp

What an agent can do

Tool

What it does

Behaviour

list_templates

Lists the rental templates of the RemplirPDF catalogue (slug, category, signers). Call it first.

read-only

get_template

Fields of a template: required or not, expected format, options, computed fields, signers. Call it before generating.

read-only

generate_document

Fills a template with the values the user gave, saves the PDF in their account, returns a 24-hour download link. With document_id it replaces an earlier document made from the same template.

writes (may overwrite)

list_documents

The latest rental documents of the account.

read-only

get_download_link

A fresh 24-hour download link for a document of the account.

read-only

Every tool has a title, a description of when to use it, described parameters, explicit readOnlyHint / destructiveHint / openWorldHint annotations and an outputSchema (results come as structuredContent).

Generating documents and download links need an active RemplirPDF subscription. Without one the tools refuse with a clear message: no tool ever starts a payment or charges a card. Documents must reflect a real tenancy; the server is not meant to produce documents meant to mislead a third party.

Example: « Prépare la quittance de loyer de septembre pour Paul Martin, 750 € plus 80,50 € de charges, 12 rue des Lilas à Lyon. » → list_templates → get_template("quittance-de-loyer") → the agent asks for the landlord's name → generate_document(...) → a PDF link.

Related MCP server: layerone-mcp

Connect

OAuth (Claude, ChatGPT, Claude Code, Cursor, VS Code)

Add the server URL; your client opens RemplirPDF, you sign in (or create an account) and click Autoriser. You can disconnect at any time. Access tokens last one hour and are refreshed while the connection is active.

  • Claude (claude.ai, Claude Desktop): Settings → Connectors → Add custom connector → https://remplirpdf.fr/api/mcp → Connect.

  • ChatGPT: Settings → Apps → developer mode → Create app → https://remplirpdf.fr/api/mcp, authentication OAuth.

  • Claude Code: claude mcp add --transport http remplirpdf https://remplirpdf.fr/api/mcp, then /mcp to sign in.

  • Cursor (~/.cursor/mcp.json) and VS Code (.vscode/mcp.json, with "type": "http"): use the URL; the editor offers to sign in.

This repository's .mcp.json / mcp.json contain the same remote configuration (no secrets).

API key (any client that can send a header)

Create a key in your account (https://remplirpdf.fr/app/compte, « Clés API »). It is shown once; only its hash is stored, and you can revoke it at any time. Send it as Authorization: Bearer rpdf_… (the Bearer prefix is optional).

# Codex CLI, ~/.codex/config.toml (then export REMPLIRPDF_API_KEY)
[mcp_servers.remplirpdf]
url = "https://remplirpdf.fr/api/mcp"
bearer_token_env_var = "REMPLIRPDF_API_KEY"

Local stdio server (this repository)

For clients that only speak stdio. It exposes exactly the remote tools (their definitions are generated from the live server into src/tools.json) and runs them through RemplirPDF's HTTPS API with your API key.

# Docker
docker build -t remplirpdf-mcp .
docker run -i --rm -e REMPLIRPDF_API_KEY=rpdf_your_key remplirpdf-mcp

# From source (Node.js 20+)
npm ci && npm run build
REMPLIRPDF_API_KEY=rpdf_your_key node dist/index.js
{
  "mcpServers": {
    "remplirpdf": {
      "command": "node",
      "args": ["/path/to/remplirpdf-mcp/dist/index.js"],
      "env": { "REMPLIRPDF_API_KEY": "rpdf_your_key" }
    }
  }
}

Variable

Default

REMPLIRPDF_API_KEY

none

API key of your account. Without it the server starts and lists its tools; calls explain how to set the key.

REMPLIRPDF_MCP_URL

https://remplirpdf.fr/api/mcp

Endpoint the tools are sent to.

Maintenance: npm run sync-tools regenerates src/tools.json from the live server (REMPLIRPDF_API_KEY set: tools/list; otherwise the public card /.well-known/mcp/server-card.json); npm test runs a stdio smoke test; npm run interop -- https://remplirpdf.fr checks the remote OAuth flow and tools with the official MCP SDK client (it creates a throwaway RemplirPDF account).

Security and privacy

  • OAuth 2.1 with PKCE (S256), exact redirect URIs, audience-bound one-hour tokens (RFC 8707), rotating refresh tokens, revocation (RFC 7009), Dynamic Client Registration (RFC 7591) and Client ID Metadata Documents.

  • Generated documents stay in your RemplirPDF account; download links expire after 24 hours.

  • Personal data is processed as described in the privacy policy: https://remplirpdf.fr/confidentialite

License

MIT, see LICENSE. RemplirPDF is a private service, not affiliated with the French administration.

Available Tools

5 tools
generate_documentGénérer le PDF rempliA
Destructive
Inspect

Remplit un modèle avec les valeurs fournies et enregistre le PDF dans le compte RemplirPDF de l'utilisateur ; renvoie un lien de téléchargement valable 24 h et le lien du document dans l'application. Vérifie d'abord les champs obligatoires et les formats : en cas d'erreur, rien n'est créé et la réponse liste ce qui manque. Sans document_id, crée toujours un nouveau document ; avec document_id, remplace le contenu d'un document déjà généré avec le même modèle (l'ancienne version est écrasée). Les valeurs doivent être exactes et fournies par l'utilisateur. Nécessite un abonnement RemplirPDF actif : sinon l'outil refuse, sans rien facturer ni démarrer de paiement. Appelez get_template avant pour connaître les champs ; pour retrouver un document existant, utilisez list_documents.

ParametersJSON Schema
NameRequiredDescriptionDefault
valuesYesValeurs des champs : { nom_du_champ: "valeur" }, avec les noms renvoyés par get_template. Dates AAAA-MM-JJ, mois AAAA-MM, montants 750 ou 750,50, cases à cocher "Oui". Les champs inconnus sont ignorés et listés dans ignored_fields.
templateYesSlug du modèle (voir list_templates), par exemple quittance-de-loyer.
document_idNoFacultatif : identifiant (doc_…) d'un document déjà généré avec ce même modèle, à remplacer au lieu d'en créer un nouveau. Un document qui a déjà une demande de signature n'est jamais modifié : un nouveau document est alors créé.

Output Schema

ParametersJSON Schema
NameRequiredDescription
pagesYesNombre de pages du PDF.
titleYesTitre du document dans le compte.
app_urlYesPage du document dans l'application RemplirPDF (connexion requise) : modifier, envoyer, faire signer.
templateYesSlug du modèle utilisé.
next_stepsYesCe que l'utilisateur peut faire ensuite (signature, envoi).
document_idYesIdentifiant du document (doc_…).
download_urlYesLien de téléchargement direct du PDF, sans connexion, valable 24 h.
ignored_fieldsNoChamps fournis mais inconnus du modèle (ignorés).
download_expires_atYesDate d'expiration du lien de téléchargement (ISO 8601).

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial context beyond the annotations: validation failures create nothing and return a list of missing items, document_id overwrites the prior version, a document with a pending signature request is never modified (a new one is created instead), and an active subscription is required with no billing on refusal. Annotations confirm destructive/non-idempotent, and the description supplies the concrete consequences.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One dense paragraph whose opening sentence front-loads what the tool does and returns. Every clause carries information, though the semicolon-chained sentences pack validation, overwrite, subscription and routing concerns together without visual separation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers the mutation risk, error/no-op behavior, subscription gate, sibling routing and the create-vs-overwrite branch. With an output schema present it correctly does not need to enumerate return fields, and nothing an agent needs to invoke it safely is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already documents the value formats and the document_id overwrite nuance, so the baseline is 3. The description nonetheless adds a real constraint not in the schema — values must be exact and user-supplied — and cross-references get_template for field names, plus the template slug source.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Starts with a specific verb+resource ('Remplit un modèle avec les valeurs fournies et enregistre le PDF'), then states the output artifacts (download link valid 24h plus the in-app document link). An agent can immediately distinguish this from siblings like get_template or get_download_link.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit routing: call get_template first to discover fields, use list_documents to retrieve an existing document. It also states the create-vs-replace branch on document_id, so the agent knows which mode it is entering and when each applies.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_templateDécrire un modèleA
Read-onlyIdempotent
Inspect

Décrit un modèle : champs à remplir (nom technique, libellé, obligatoire ou non, format attendu, options, valeur par défaut), champs calculés automatiquement et signataires. À appeler avant generate_document pour savoir quelles informations demander à l'utilisateur (ne les inventez pas) ; pour trouver le slug, utilisez list_templates. Lecture seule : ne crée rien.

ParametersJSON Schema
NameRequiredDescriptionDefault
templateYesSlug du modèle renvoyé par list_templates, par exemple bail-meuble ou quittance-de-loyer.

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameYesNom du modèle.
slugYesIdentifiant du modèle.
notesYesRègles à connaître avant de générer.
pagesNoNombre de pages du PDF.
signersYesSignataires du document.
categoryYesFamille de documents.
sectionsYesParties du formulaire, dans l'ordre du document.
guide_urlYesGuide du document sur remplirpdf.fr.
document_titleYesTitre imprimé sur le document.
computed_automaticallyYesChamps calculés par RemplirPDF : ne pas les fournir.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered by structured data and the 'Lecture seule : ne crée rien' clause is largely redundant. The description does add genuine behavioral value with the 'ne les inventez pas' constraint on field values and the enumeration of what the response contains, which goes beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first clause, followed by the return contents and then the usage rules, with no filler sentences. The parenthetical field enumeration is somewhat long but each item informs what the agent must collect from the user, so it earns its place; only slight tightening is possible.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present the description needn't document return values, yet it still summarizes them; annotations carry the safety profile; and the single required parameter is fully specified in the schema. Nothing an agent needs to select and invoke this tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single 'template' parameter already carries an enum plus a description pointing back to list_templates, so the schema does the heavy lifting. The description reinforces slug provenance but adds no format, casing, or validity detail beyond what the schema provides; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Décrit un modèle') and then enumerates the exact contents returned: fillable fields with their attributes, auto-computed fields, and signatories. This lets an agent distinguish it immediately from list_templates (which only lists) and generate_document (which produces the document).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states the sequencing rule ('À appeler avant generate_document') and the reason ('pour savoir quelles informations demander à l'utilisateur'), plus a negative instruction not to fabricate values. It also routes the agent to list_templates for slug discovery, naming the alternative and the condition that selects it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_documentsLister mes documents de locationA
Read-onlyIdempotent
Inspect

Liste les derniers documents de location générés dans le compte de l'utilisateur (identifiant, titre, modèle, nombre de pages, date de mise à jour), du plus récent au plus ancien. À utiliser pour retrouver un document_id avant get_download_link, ou avant de mettre à jour un document avec generate_document. Lecture seule : ne crée ni ne modifie rien.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNombre maximum de documents à renvoyer (de 1 à 50, 20 par défaut).

Output Schema

ParametersJSON Schema
NameRequiredDescription
documentsYesDocuments, du plus récent au plus ancien.

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the closing sentence 'Lecture seule : ne crée ni ne modifie rien' largely restates structured data. What it does add beyond annotations is the ordering guarantee (most recent first) and the returned field list, but no pagination limits, account scoping caveats, or failure modes are covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the resource and scope, followed by the routing guidance. Slightly wasteful only in the trailing read-only sentence, which duplicates the annotation hints.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only listing tool with an output schema present, everything an agent needs is covered: what it returns, ordering, and which sibling to call next. The field enumeration mildly duplicates the output schema but leaves no functional gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single 'limit' parameter is fully documented in the schema with default and 1-50 bounds, so the description reasonably leaves it alone. Baseline 3 applies since the description adds no syntax or semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Liste) and resource (documents de location générés dans le compte) plus the fields returned and the sort order (du plus récent au plus ancien). This clearly separates it from get_download_link and generate_document, which the description explicitly names.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit downstream routing: use it to retrieve a document_id before calling get_download_link, or before updating a document with generate_document. That is a concrete when-to-use condition tied to named sibling tools, not an implied one.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_templatesLister les modèles de locationA
Read-onlyIdempotent
Inspect

Liste les modèles de documents de location français proposés par RemplirPDF, un par page du catalogue (bail meublé, bail vide, bail mobilité, étudiant, colocation, commercial, précaire, état des lieux d'entrée et de sortie, quittance de loyer, avis d'échéance, attestations, acte de caution, préavis, congé pour vente…) avec leur slug, leur catégorie et leurs signataires. À appeler en premier quand le slug du modèle n'est pas encore connu ; pour les champs d'un modèle précis, utilisez get_template. Lecture seule : ne crée rien.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
templatesYesLes modèles disponibles.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered; the closing 'Lecture seule : ne crée rien' largely restates that. It does add useful non-annotation context: results are paginated one template per catalog page. No auth or rate-limit detail, but the bar is lower with annotations present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose and the routing rule before the long parenthetical catalog list. The enumeration of a dozen template types is somewhat verbose, but it is informative and the sentence still earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and the description still names the key fields. For a zero-parameter, read-only list tool the definition covers everything an agent needs to select and call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline is 4. The mention of slug/catégorie/signataires describes output fields rather than inputs, which is harmless.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Liste les modèles de documents de location français') and enumerates the catalog contents (bail meublé, bail vide, quittance, etc.) with the fields returned (slug, catégorie, signataires). It explicitly distinguishes itself from the sibling get_template, so an agent can tell the two apart without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit routing rule: call this first when the template slug is unknown, and use get_template instead for the fields of a specific template. The when-to-use and the named alternative are both present, leaving nothing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updatesv1.1.0
    • First observedgenerate_document
    • First observedget_download_link
    • First observedget_template
    • First observedlist_documents
    • First observedlist_templates

TDQS

A4.5/5.0

Scored across 5 tools

Disambiguation5/5

Each tool targets a distinct resource+action: listing vs. describing templates, generating documents, listing documents, and fetching download links. The descriptions explicitly cross-reference each other (e.g., 'use list_templates for the slug, get_template for fields') and clarify boundaries. No two tools overlap in purpose.

Naming Consistency5/5

All five tools follow a clean verb_noun snake_case pattern: get_template, list_templates, generate_document, list_documents, get_download_link. The convention is uniform throughout with no deviations.

Tool Count5/5

Five tools is well-scoped for a document-generation service. Each tool earns its place in the discovery-to-download workflow without redundancy or thin coverage.

Completeness4/5

The surface covers the full lifecycle: list/describe templates, generate (with in-place update via document_id), list documents, and retrieve download links. The only minor gap is the absence of a delete_document operation, but core workflows have no dead ends.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables users to generate rental agreements and receipts as PDFs through an AI-powered WhatsApp bot. Provides stamp duty information lookup and handles rental document creation with customizable templates.
    -
  • A
    license
    A
    quality
    D
    maintenance
    Enables AI agents to generate documents (PDF/DOCX/Factur-X) and manage electronic signatures (eIDAS/PAdES) via natural language using LayerOne's DocX and Sign APIs.
    20
    38 npm
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to operate property management systems via natural language, covering repair orders, owner info, payments, notices, and inspections. Features a full agentic workflow with human-in-the-loop and observability.
    MIT