mcp-relances-postgres
A read-only MCP server for querying due follow-up reminders from a Postgres view.
List due follow-ups with
relances_dues, optionally specifying a reference date (YYYY-MM-DD, default today) and a limit (default 20, max 200), returning oldest first with days overdue.Summarize due follow-ups by channel with
resume_relances, countingemail,telephone, andcourrierfor a given date.Access only the
v_relances_a_faireview; all queries run in rolled-backREAD ONLYtransactions, with no write capability.
Provides read-only access to a PostgreSQL view to list due follow-ups, including days overdue, and summarize due follow-ups by channel.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-relances-postgres Quelles relances sont dues aujourd'hui ?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-relances-postgres
Français
Un petit serveur MCP en TypeScript qui répond, en lecture seule, à la question : « quelles relances sont dues aujourd'hui ? ». Il interroge une vue Postgres et expose deux outils à Claude (ou à tout client MCP). Une base de démonstration entièrement fictive est fournie.
But
Donner à un assistant l'accès à un besoin précis (les relances à traiter) sans lui ouvrir toute la base : une vue, deux outils, aucune écriture possible.
Outil | Rôle |
| Liste les relances à faire dont l'échéance est atteinte ou dépassée, de la plus ancienne à la plus récente, avec les jours de retard. Paramètres : |
| Compte les relances dues par canal ( |
Installation
Prérequis : Node.js 20 ou plus, un Postgres, psql.
git clone https://github.com/Louis75011/mcp-relances-postgres.git
cd mcp-relances-postgres
npm ci
npm run build
# Base de démonstration (fictive) : crée les tables, la vue et les données
export DATABASE_URL="postgresql://utilisateur:motdepasse@localhost:5432/relances_demo"
npm run seedPour une base réelle, créez le rôle de sql/lecteur-lecture-seule.sql : il ne peut lire que la vue v_relances_a_faire. Le serveur ouvre en plus chaque requête dans une transaction READ ONLY toujours annulée.
Variables d'environnement : DATABASE_URL (obligatoire), MAX_ROWS (facultatif, 50 par défaut, 200 au plus).
Tests et contrôles : npm run lint, npm run typecheck, npm test. Les tests tournent sur Postgres en mémoire (PGlite) ; avec DATABASE_URL défini, deux tests d'intégration s'exécutent aussi sur un vrai Postgres.
Lancer avec npx
Sans cloner le dépôt : npx télécharge le paquet mcp-relances-postgres depuis npm et lance le serveur. Prérequis : Node.js 20 ou plus et une base déjà initialisée avec sql/schema.sql et sql/seed.sql (voir « Installation »).
DATABASE_URL="postgresql://utilisateur:motdepasse@localhost:5432/relances_demo" npx -y mcp-relances-postgresLe serveur parle MCP sur stdio : il attend un client et n'affiche rien d'autre que « prêt » sur stderr. Pour le déclarer dans Claude Code :
claude mcp add relances \
-e DATABASE_URL="postgresql://utilisateur:motdepasse@localhost:5432/relances_demo" \
-- npx -y mcp-relances-postgresou dans claude_desktop_config.json : "command": "npx" et "args": ["-y", "mcp-relances-postgres"], avec DATABASE_URL dans env.
Alternative sans passer par le registre npm : npx peut aussi récupérer le dépôt GitHub, le compiler (script prepare) et le lancer. Il faut alors Git, et le premier lancement est plus long.
DATABASE_URL="postgresql://utilisateur:motdepasse@localhost:5432/relances_demo" npx -y github:Louis75011/mcp-relances-postgresExemple d'appel depuis Claude
Déclarer le serveur dans Claude Code :
claude mcp add relances \
-e DATABASE_URL="postgresql://utilisateur:motdepasse@localhost:5432/relances_demo" \
-- node /chemin/vers/mcp-relances-postgres/dist/index.jsou dans la configuration de Claude Desktop (claude_desktop_config.json) :
{
"mcpServers": {
"relances": {
"command": "node",
"args": ["/chemin/vers/mcp-relances-postgres/dist/index.js"],
"env": { "DATABASE_URL": "postgresql://utilisateur:motdepasse@localhost:5432/relances_demo" }
}
}
}Puis, dans la conversation : « Quelles relances sont dues aujourd'hui ? » Claude appelle relances_dues ; avec la base de démonstration et la date du 27 octobre 2026, relances_dues avec {"date": "2026-10-27", "limite": 2} renvoie :
{
"date": "2026-10-27",
"total": 4,
"renvoyees": 2,
"relances": [
{
"relance_id": 1,
"nom": "Camille Exemple",
"organisation": "Atelier Fictif",
"email": "camille@example.com",
"canal": "email",
"echeance": "2026-10-20",
"jours_de_retard": 7,
"note": "Relancer après l'envoi du devis"
},
{
"relance_id": 2,
"nom": "Dominique Modèle",
"organisation": "Maison Imaginaire",
"email": "dominique@example.com",
"canal": "telephone",
"echeance": "2026-10-26",
"jours_de_retard": 1,
"note": "Proposer un créneau de visio"
}
]
}Architecture en cinq lignes
src/index.tsdémarre le serveur MCP sur stdio (stdout réservé au protocole, journaux sur stderr).src/server.tsdéclare les deux outils, avec validation des entrées par zod et l'annotationreadOnlyHint.src/relances.tscontient les requêtes SQL paramétrées sur la vuev_relances_a_faire, sans aucune écriture.src/db.tsisole l'accès Postgres derrière une interface minimale ; chaque requête passe dans une transactionREAD ONLYannulée.sql/fournit le schéma, le seed fictif et le rôle en lecture seule ; les tests Vitest utilisent PGlite, la CI GitHub Actions ajoute un vrai Postgres et gitleaks.
Licence
MIT.
Related MCP server: Zendesk Live MCP
English
A small MCP server in TypeScript that answers, read-only, the question: "which follow-ups are due today?". It queries a Postgres view and exposes two tools to Claude (or any MCP client). A fully fictional demo database is included.
Purpose
Give an assistant access to one precise need (the follow-ups to handle) without opening the whole database: one view, two tools, no write path.
Tool | Role |
| Lists follow-ups still to do whose due date is reached or past, oldest first, with days overdue. Parameters: |
| Counts due follow-ups per channel ( |
Tool names and data fields are in French, as in the demo schema.
Installation
Requirements: Node.js 20 or later, a Postgres database, psql.
git clone https://github.com/Louis75011/mcp-relances-postgres.git
cd mcp-relances-postgres
npm ci
npm run build
# Demo database (fictional): creates the tables, the view and the data
export DATABASE_URL="postgresql://user:password@localhost:5432/relances_demo"
npm run seedFor a real database, create the role from sql/lecteur-lecture-seule.sql: it can only read the v_relances_a_faire view. On top of that, the server runs every query inside a READ ONLY transaction that is always rolled back.
Environment variables: DATABASE_URL (required), MAX_ROWS (optional, 50 by default, 200 at most).
Checks: npm run lint, npm run typecheck, npm test. Tests run on in-memory Postgres (PGlite); when DATABASE_URL is set, two integration tests also run against a real Postgres.
Run with npx
Without cloning the repository: npx downloads the mcp-relances-postgres package from npm and starts the server. Requirements: Node.js 20 or later and a database already initialised with sql/schema.sql and sql/seed.sql (see "Installation").
DATABASE_URL="postgresql://user:password@localhost:5432/relances_demo" npx -y mcp-relances-postgresThe server speaks MCP over stdio: it waits for a client and prints nothing but "ready" on stderr. To register it in Claude Code:
claude mcp add relances \
-e DATABASE_URL="postgresql://user:password@localhost:5432/relances_demo" \
-- npx -y mcp-relances-postgresor in claude_desktop_config.json: "command": "npx" and "args": ["-y", "mcp-relances-postgres"], with DATABASE_URL under env.
Alternative without the npm registry: npx can also fetch the GitHub repository, build it (prepare script) and run it. Git is then required, and the first run is slower.
DATABASE_URL="postgresql://user:password@localhost:5432/relances_demo" npx -y github:Louis75011/mcp-relances-postgresExample call from Claude
Register the server in Claude Code:
claude mcp add relances \
-e DATABASE_URL="postgresql://user:password@localhost:5432/relances_demo" \
-- node /path/to/mcp-relances-postgres/dist/index.jsor in the Claude Desktop configuration (claude_desktop_config.json):
{
"mcpServers": {
"relances": {
"command": "node",
"args": ["/path/to/mcp-relances-postgres/dist/index.js"],
"env": { "DATABASE_URL": "postgresql://user:password@localhost:5432/relances_demo" }
}
}
}Then ask: "Which follow-ups are due today?" Claude calls relances_dues; with the demo database and the date 27 October 2026, relances_dues with {"date": "2026-10-27", "limite": 2} returns the same JSON as shown in the French section above (4 due in total, the 2 oldest returned).
Architecture in five lines
src/index.tsstarts the MCP server over stdio (stdout is reserved for the protocol, logs go to stderr).src/server.tsdeclares the two tools, with zod input validation and thereadOnlyHintannotation.src/relances.tsholds the parameterized SQL queries on thev_relances_a_faireview, with no write statement.src/db.tshides Postgres behind a minimal interface; every query runs in a rolled-backREAD ONLYtransaction.sql/provides the schema, the fictional seed and the read-only role; Vitest tests use PGlite, and the GitHub Actions CI adds a real Postgres and gitleaks.
License
MIT.
Available Tools
2 toolsrelances_duesRelances duesARead-onlyIdempotent
Liste les relances à faire dont l'échéance est atteinte ou dépassée (lecture seule). Triées de la plus ancienne à la plus récente, avec le nombre de jours de retard.
Inputs: date, limite.
resume_relancesRésumé des relances duesBRead-onlyIdempotent
Compte les relances dues par canal (email, telephone, courrier) à une date donnée (lecture seule).
Inputs: date.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 2 tools
The two tools have clearly distinct outputs: relances_dues returns a detailed ordered list of overdue reminders, while resume_relances returns aggregated counts by channel. An agent can easily choose the right one based on whether it needs rows or summary counts.
Both names are French snake_case and readable, but they follow slightly different patterns: relances_dues is a noun phrase while resume_relances is verb+noun. This is a minor inconsistency rather than a confusing mix of conventions.
Two tools is thin for a server surface, even a narrowly read-only one. The tools are well scoped, but the overall offering feels minimal and borderline underpowered.
The surface covers listing overdue reminders and summarizing counts by channel, which fits a read-only reporting purpose. However, there are notable gaps: no retrieval by client/reminder id, no filtering options, and no history or period-based reporting beyond a single date.
Maintenance
Related MCP Connectors
Read-only analytics for Convex apps, queryable via MCP from Claude, Cursor, and other clients.
Read-only MCP server for ClassQuill, a tutoring-business-management platform.
Read-only Google Analytics 4 MCP server for AI assistants.
Query your org's data in natural language — read-only MCP access to SQL, NoSQL, files & warehouses.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceProvides a read-only PostgreSQL SQL surface for LLM agents via MCP, with defense-in-depth security layers for safe database queries.136 PyPI4MIT
- FlicenseBqualityDmaintenanceRead-only MCP server for complete, reconciled reporting from live Zendesk data, designed for Cursor and other MCP clients.6-
- FlicenseNot gradedqualityBmaintenanceRead-only MCP server connecting Claude to Vtiger CRM for leads, deals, and overdue follow-ups.-
- AlicenseAqualityDmaintenanceRead-only MCP server for Pipedrive that provides a digest-ready sales queue with overdue follow-ups, due today activities, and deals missing next action.488 npmMIT