- Python 100%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
kanboard_list_tasks rendait une liste JSON nue, coupée à `limit` sans rien en dire. Mesuré sur l'instance le 2 septembre 2026 : le projet 29 porte 109 cartes fermées ; status=0, limit=100 en rendait 100, et la réponse était indiscernable d'un projet qui en contient exactement 100. Les 9 autres n'étaient atteignables par aucun paramètre, l'outil n'ayant pas d'`offset`. La réponse prend l'enveloppe déjà servie par kanboard_list_projects : `total_available` compté AVANT la coupe, `offset`, `count`, `has_more`, et `next_offset`, la valeur à passer ensuite, présent seulement quand une page suivante existe. Un projet vide rend cette enveloppe lui aussi, plutôt que `[]`. Deux limites restent, et sont écrites dans la docstring. getAllTasks ne pagine pas côté serveur : le connecteur reçoit toujours toutes les tâches du projet et découpe ensuite, donc `offset` épargne la résolution des libellés, un appel par tâche rendue pour la colonne, le swimlane, le projet, la catégorie et le porteur, mais pas l'appel JSON-RPC lui-même. Et l'ordre est celui de Kanboard, par colonne puis position, pas un tri stable garanti : une carte déplacée entre deux appels change de rang, donc paginer un tableau en cours de remaniement peut sauter ou répéter une ligne. L'outil n'avait aucun test. TestListTasks en ajoute dix : la reproduction du cas 109 sur 100 avant correction, puis la non régression sur la dernière page, l'offset hors bornes, l'offset négatif, le projet vide, le plafond de `limit`, et le fait que seule la fenêtre rendue soit résolue. docs/RECETTE_GLOBALE.md annonçait encore kanboard 0.13.2, deux versions en retard. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
| .github/workflows | ||
| docs | ||
| dolibarr_mcp | ||
| gitlab_mcp | ||
| hedgedoc_mcp | ||
| kanboard_mcp | ||
| LICENSES | ||
| matrix_mcp | ||
| n8n_mcp | ||
| nextcloud_mcp | ||
| scripts | ||
| tests | ||
| wordpress_mcp | ||
| .gitignore | ||
| .gitlab-ci.yml | ||
| CONTRIBUTING.md | ||
| LICENSE | ||
| NOTICE | ||
| pyproject.toml | ||
| README.md | ||
| REUSE.toml | ||
mcp-foss-connectors
Vendor-neutral Model Context Protocol (MCP) servers that let MCP clients — Claude Desktop, Cowork, or any other MCP host — read from and act on the free and open-source tools that run a typical back office: ERP, project board, CMS, automation, chat, file storage, notes and code forge.
Every server is a single, self-contained Python file. It is configured entirely through environment variables — no hostname, login or secret is ever baked into the code — so it works against any instance of the target tool, whether self-hosted or managed.
Origin: these connectors were built and battle-tested at inno³ against its own information system, then generalised and released under Apache-2.0. See Origin & attribution.
Connectors
| Connector | Server name | Tools | Integrates with | Auth |
|---|---|---|---|---|
| Dolibarr ERP | dolibarr-mcp |
78¹ | Dolibarr 16+ REST API | DOLAPIKEY API key |
| Kanboard | kanboard-mcp |
53 | Kanboard JSON-RPC API | personal API token |
| WordPress | wordpress-mcp |
26 | WP REST API (+ ACF) | Application Password |
| n8n | n8n-mcp |
22 | n8n public REST API | X-N8N-API-KEY |
| Matrix | matrix-mcp |
22 | Matrix client-server API | access token |
| Nextcloud | nextcloud-mcp |
14 | WebDAV + OCS API | app password |
| HedgeDoc | hedgedoc-mcp |
8 | HedgeDoc 1.x API | session / API token |
| GitLab | gitlab-mcp |
18 | GitLab REST API v4 | personal access token |
All servers target Python 3.11+ and use the official mcp library.
A per-connector README in each *_mcp/ directory documents its environment
variables and tools in detail.
¹ Dolibarr exposes 78 vendor-neutral tools. Organisation-specific tools
that depend on custom Dolibarr modules (e.g. inno³'s MeetingNotes and signed
portal URLs) are not shipped here: they live in a separate package that
plugs in via the dolibarr_mcp.extensions entry-point group. See
Optional extensions and
dolibarr_mcp/README.md.
Quick start (from source)
git clone <this-repo> && cd mcp-foss-connectors
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
# configure the connector you want, then run it over stdio
export GITLAB_URL="https://gitlab.com"
export GITLAB_TOKEN="glpat-…"
python -m gitlab_mcp.server
To wire a server into an MCP client manually, point the client at the module:
{
"mcpServers": {
"gitlab": {
"command": "python",
"args": ["-m", "gitlab_mcp.server"],
"env": { "GITLAB_URL": "https://gitlab.com", "GITLAB_TOKEN": "glpat-…" }
}
}
}
Install in Claude Desktop (MCPB bundle)
Each connector can be packaged as an MCPB bundle (the Claude Desktop
extension format): a zip containing manifest.json + src/server.py +
src/lib/ (vendored dependencies).
python scripts/build_mcpb.py gitlab # produces dist/gitlab-mcp.mcpb
Then in Claude Desktop → Settings → Extensions, drag the .mcpb file in and
fill the requested fields (URL, token…). They are stored encrypted by the
client. See docs/PACKAGING.md for the MCPB rules and
known gotchas.
MCPB bundles are build artifacts and are not committed to this repository.
Download pre-built bundles
You don't have to build them yourself — pre-built .mcpb bundles for every
connector are attached to each tagged
release.
Latest — v0.1.0:
| Connector | Download |
|---|---|
| Dolibarr ERP | dolibarr-mcp.mcpb |
| Kanboard | kanboard-mcp.mcpb |
| WordPress | wordpress-mcp.mcpb |
| n8n | n8n-mcp.mcpb |
| Matrix | matrix-mcp.mcpb |
| Nextcloud | nextcloud-mcp.mcpb |
| HedgeDoc | hedgedoc-mcp.mcpb |
| GitLab | gitlab-mcp.mcpb |
The bundles embed no credentials: you fill the URL/token at install time and the client stores them encrypted.
Configuration model
- One environment variable per setting. Conventionally
<TOOL>_URLfor the base URL plus the credential variables listed in each connector's README. - No defaults that point at a specific deployment. Where a connector ships a
default URL it is the tool's public/canonical one (e.g.
https://gitlab.com) or empty, never a private host. - Compact responses. Servers return minified JSON with conservative default page sizes to keep the client's context window small.
Optional extensions
The connectors stay vendor-neutral, but they are extensible: an organisation that runs custom modules can add its own tools without forking.
The Dolibarr connector discovers extensions through the
entry-point
group dolibarr_mcp.extensions. A separate package advertises a register
callable there:
# in the extension package's pyproject.toml
[project.entry-points."dolibarr_mcp.extensions"]
my_org = "my_org_pkg.extension:register"
# my_org_pkg/extension.py
def register(mcp):
"""Receives the live FastMCP instance; add @mcp.tool()-style tools."""
mcp.tool()(my_extra_tool)
When that package is installed next to mcp-foss-connectors, its tools appear
automatically; uninstall it and the connector falls back to the generic core.
No environment flag, no patch to this repository.
inno³ ships its own such add-on — inno3-mcp-extensions — for tools that depend on its
custom Dolibarr modules (MeetingNotes, signed client/support-credits portal
URLs). It is not part of this repo, which keeps the public core strictly
generic.
Tests
pytest
All tests are offline unit tests — every HTTP call is mocked, so the suite
runs with no network and no real credentials. Each connector has a
tests/test_<tool>.py.
Origin & attribution
This toolkit was created by inno³, an independent consultancy specialised in open-source and open-innovation strategy, legal and compliance. inno³ runs its own back office entirely on the free/open-source tools these connectors target, and originally wrote them to drive that system from MCP clients.
The code was then generalised — stripped of any inno³-specific host, identifier or module — and published here under the Apache License 2.0 so that:
- any organisation running these tools can reuse the connectors as-is, and
- inno³ can migrate its own usage onto this public, community-maintainable code base rather than a private fork.
Organisation-specific helpers (tools tied to inno³'s own Dolibarr modules) are kept entirely out of this repository and published as a separate add-on package — see Optional extensions.
Please keep the NOTICE file when redistributing, as required by the
Apache-2.0 license. "inno³" is a trademark of inno³; the tool names above belong
to their respective projects, which do not endorse this work.
License
Apache License 2.0 — © 2026 inno³ and contributors.