Digiforma MCP Server
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., "@Digiforma MCP ServerList my trainees and their enrolled training sessions"
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.
Digiforma MCP Server
Un serveur MCP qui expose l'API GraphQL de Digiforma (apprenants, sessions de formation, et accès GraphQL générique) à un client compatible MCP (Claude Desktop, Claude Code, etc.).
⚠️ Ce n'est pas un connecteur officiel Digiforma — c'est un serveur MCP maison construit sur leur API GraphQL publique.
Outils exposés
digiforma_graphql— exécute n'importe quelle requête/mutation GraphQL (idéal pour tout ce qui n'est pas déjà couvert ci-dessous).digiforma_introspect_schema— liste les types du schéma GraphQL Digiforma, pour explorer ce qui est disponible.digiforma_list_trainees— liste les apprenants.digiforma_get_trainee— détail d'un apprenant + ses sessions.digiforma_list_training_sessions— liste les sessions de formation.
Related MCP server: mcp4gql
Prérequis
Node.js ≥ 18
Un compte Digiforma avec l'accès API GraphQL activé sur votre plan (à vérifier dans les options avancées de votre compte, ou en contactant le support Digiforma).
Un token d'API Digiforma :
Connectez-vous à votre compte Digiforma.
Allez dans la page de configuration de l'API (Paramètres avancés → API).
Cliquez sur "Générer un token".
Copiez le token généré — vous ne pourrez le revoir qu'une fois.
Documentation officielle : GraphQL, l'API Digiforma
Installation
git clone <URL_DU_DEPOT>
cd digiforma-mcp
npm installConfiguration
Le serveur lit deux variables d'environnement :
Variable | Requis | Description |
| Oui | Le token Bearer généré depuis votre compte Digiforma. |
| Non | Endpoint GraphQL (défaut : |
Claude Desktop
Ajoutez ceci à votre fichier claude_desktop_config.json :
{
"mcpServers": {
"digiforma": {
"command": "node",
"args": ["/chemin/absolu/vers/digiforma-mcp/src/index.js"],
"env": {
"DIGIFORMA_API_TOKEN": "votre_token_ici"
}
}
}
}Puis redémarrez Claude Desktop.
Claude Code
claude mcp add digiforma \
--env DIGIFORMA_API_TOKEN=votre_token_ici \
-- node /chemin/absolu/vers/digiforma-mcp/src/index.jsTest manuel
DIGIFORMA_API_TOKEN=votre_token node src/index.jsLe serveur communique en stdio selon le protocole MCP ; pour un test rapide
sans client MCP, vous pouvez aussi interroger directement l'API avec curl :
curl -X POST https://app.digiforma.com/api/v1/graphql \
-H "Authorization: Bearer votre_token" \
-H "Content-Type: application/json" \
-d '{"query": "{ trainees { id firstname lastname email } }"}'Limites connues
Le schéma exact de l'API Digiforma (tous les champs et types disponibles)
n'est pas publiquement documenté dans le détail — utilisez l'outil
digiforma_introspect_schema ou l'interface GraphiQL fournie par Digiforma
(https://app.digiforma.com/api/v1/graphiql) pour explorer les champs
disponibles et adapter/étendre les requêtes de ce serveur si besoin.
Licence
MIT
Available Tools
5 toolsdigiforma_get_traineeA
Get a single trainee by id, including their training sessions.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The trainee's Digiforma id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of behavioral disclosure. It does state that training sessions are included, which is useful, but it does not mention read-only behavior, error cases (e.g., not found), authentication requirements, or response format beyond the inclusion of sessions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler. Every word adds meaning: the action, the target, the lookup key, and the included related data.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity single-parameter getter, the description is mostly complete: it identifies what is returned ('including their training sessions'). It lacks explicit error semantics or output shape, but those are less critical given the simple nature of the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Parameter schema coverage is 100% and the description essentially restates the id parameter. It adds no additional semantic detail beyond what the schema already provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Get a single trainee by id') and adds a distinctive scope: 'including their training sessions.' This clearly differentiates it from siblings like digiforma_list_trainees, which would return many trainees.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'by id' gives a clear retrieval context and implies this tool is for a single known trainee, not for listing or searching. It does not explicitly name alternatives or exclusions, but the intended use case is evident from the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
digiforma_graphqlA
Run an arbitrary GraphQL query or mutation against the Digiforma API. Use this for anything not covered by the convenience tools below, or to run introspection queries to discover the full schema (e.g. { __schema { types { name } } }).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | The GraphQL query or mutation document. | |
| variables | No | Optional GraphQL variables object. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It openly discloses that the tool supports arbitrary queries and mutations, signaling there are no guardrails and that operations may be mutating. It also reveals introspection is permitted. It does not cover auth, rate limits, or error shapes, but for a raw GraphQL client the core behavioral traits are stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two purposeful sentences with no filler. The purpose is front-loaded and the example is integrated without bloating the text. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a generic GraphQL fallback tool, the description covers purpose, scope, and usage with an example, and the schema covers parameters. It does not mention the response envelope or authentication, but these are less critical given the tool's generic nature and the absence of an output schema. Slightly more detail on response behavior would be needed for a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value beyond the schema by illustrating a valid query document with an introspection example, clarifying what sort of string belongs in the query parameter. The variables parameter is not elaborated, but the schema already describes it fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and object: 'Run an arbitrary GraphQL query or mutation against the Digiforma API.' It clearly distinguishes itself as the raw/fallback tool from the convenience siblings by saying it is for anything not covered below and for introspection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use this tool: 'for anything not covered by the convenience tools below' and for introspection queries. This is an explicit condition that also implies the when-not: use a convenience tool when it covers the operation. It even provides an introspection query example.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
digiforma_introspect_schemaA
Fetch the list of GraphQL type names exposed by the Digiforma API (a lightweight introspection query). Useful to discover which objects and fields are available before writing a custom digiforma_graphql query.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. Calling it a 'lightweight introspection query' communicates a read-only, low-impact operation, which is the key behavioral trait. It does not mention auth or rate limits, but those are less critical for a zero-parameter schema fetch.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences: the first names the action and resource, the second adds usage context. No filler or redundancy, and the core purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no parameters, no annotations, and no output schema, the description covers what is returned, the lightweight/read-only nature, and when to call it. An agent has sufficient information to decide and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so there are no parameter semantics to clarify; the empty input schema fully covers this. The description adds the relevant output context by saying it returns GraphQL type names, meeting the 0-param baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Fetch') and a clear resource ('list of GraphQL type names exposed by the Digiforma API'). The parenthetical 'lightweight introspection query' and the reference to digiforma_graphql help differentiate it from data-returning siblings like digiforma_list_trainees and digiforma_get_trainee.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly frames when to use the tool: 'before writing a custom digiforma_graphql query,' and names digiforma_graphql as the follow-up tool. It does not explicitly state exclusions for the trainee/session siblings, but those are clearly data retrieval rather than schema discovery.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
digiforma_list_traineesA
List trainees (learners/apprenants) registered in Digiforma, with their basic contact info.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden. 'List' implies a read-only enumerating operation and 'with their basic contact info' discloses the output shape. But it does not explicitly confirm non-destructiveness, mention pagination, or define what 'basic' excludes, so some behavioral ambiguity remains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the action and resource, and no filler. Every word contributes to the meaning; 'registered in Digiforma' adds needed context and the parenthetical clarifies the learner terminology.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple zero-parameter list tool, the description gives the essential purpose and a rough idea of the response ('basic contact info'), especially since there is no output schema. However, it leaves 'basic contact info' vague, does not mention pagination or field limitations, and omits any routing to sibling tools like digiforma_get_trainee when richer data is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema is an empty object with 100% coverage. With no parameters to document, the description only needs to make clear that invocation requires no arguments, which it effectively does by not mentioning any.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses a specific verb+resource pair: 'List trainees (learners/apprenants) registered in Digiforma'. It also tells the agent what to expect in the result ('basic contact info'), and the resource is clearly distinct from sibling tools like digiforma_get_trainee or digiforma_list_training_sessions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the verb 'List': the tool is for enumerating registered trainees, not for fetching a single trainee or querying arbitrary data. However, it never explicitly states when to prefer this over digiforma_get_trainee or digiforma_graphql, and gives no exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
digiforma_list_training_sessionsA
List training sessions (sessions de formation) configured in Digiforma.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The verb 'List' implies a read-only operation, and 'configured in Digiforma' clarifies the data source. However, with no annotations and no output schema, the description does not disclose pagination behavior, result format, or any additional guarantees. This is adequate but leaves clear gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, compact sentence that front-loads the action and resource. It contains no filler, repetition, or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter listing tool, the description is sufficient for an agent to invoke it correctly: it clearly says what will be listed and where the data comes from. The only missing context is the output shape and possible pagination, which are not critical for a simple list operation with no arguments.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema is empty with 100% coverage, so there is no parameter information for the description to add. The zero-parameter baseline applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List'), a clear resource ('training sessions'), and a scope ('configured in Digiforma'). This clearly distinguishes it from sibling tools such as digiforma_list_trainees and digiforma_get_trainee, which handle a different resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended usage is implied by the description: use it when training sessions need to be listed. However, there is no explicit when-to-use guidance, no mention of alternatives, and no exclusion criteria, so the tool relies entirely on the agent inferring the context.
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.
5 tool updates
v1.0.0- First observed
digiforma_get_trainee - First observed
digiforma_graphql - First observed
digiforma_introspect_schema - First observed
digiforma_list_trainees - First observed
digiforma_list_training_sessions
TDQS
Scored across 5 tools
Each tool has a clearly distinct purpose: the GraphQL and introspection tools serve as meta-access, while list/get trainee and list training sessions target specific resources with no overlap. Even the generic GraphQL tool is explicitly framed as a fallback, avoiding confusion.
All tools follow a consistent 'digiforma_' prefix followed by a verb_noun pattern (e.g., list_trainees, get_trainee, introspect_schema). The naming is uniform and predictable, making it easy for an agent to infer behavior.
With 5 tools, the server is well-scoped for a domain focused on trainees and training sessions. The inclusion of a generic GraphQL tool covers edge cases without bloating the count, making it neither too thin nor too heavy.
The convenience tools cover the primary read operations (list/get trainees, list sessions), and the generic GraphQL tool enables any missing operations such as create/update/delete. Minor gaps exist for convenient mutation access, but the fallback prevents dead ends.
Maintenance
Related MCP Connectors
The Grafbase MCP server sits in front of a GraphQL API and exposes an MCP protocol-compliant interface that allows AI agents and LLMs to explore and query GraphQL APIs using natural language. It provides tools to search schemas, introspect types and fields, and execute GraphQL queries while minimizing context bloat by returning only relevant schema subsets, with built-in support for authentication, authorization, and configurable access control.
- FormastyOAuthcom.formasty
Create, edit, validate, publish, and inspect Formasty forms and quizzes over authenticated MCP.
Read-only MCP server for public WeJob jobs, formations, and companies.
Query, browse, and automate OmegaAI workspaces from any MCP client. Streamable HTTP with OAuth 2.0.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceTurn any GraphQL endpoint into a set of MCP tools23MIT
- AlicenseAqualityDmaintenanceGraphQL MCP Server that acts as a bridge allowing MCP clients (like Cursor or Claude Desktop) to interact with target GraphQL APIs through standard tools for schema introspection and operation execution.27 npm3MIT
- AlicenseAqualityAmaintenanceEnhanced MCP server for GraphQL with filtered introspection and full variable support.3827,197 npm3MIT
- AlicenseNot gradedqualityDmaintenanceAutomatically generates MCP tools from any GraphQL API by introspecting its schema, supporting queries, mutations, and authentication.5GPL 3.0