Skip to main content
Glama
maureen-bny

Digiforma MCP Server

by maureen-bny

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 :

    1. Connectez-vous à votre compte Digiforma.

    2. Allez dans la page de configuration de l'API (Paramètres avancés → API).

    3. Cliquez sur "Générer un token".

    4. 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 install

Configuration

Le serveur lit deux variables d'environnement :

Variable

Requis

Description

DIGIFORMA_API_TOKEN

Oui

Le token Bearer généré depuis votre compte Digiforma.

DIGIFORMA_API_URL

Non

Endpoint GraphQL (défaut : https://app.digiforma.com/api/v1/graphql).

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.js

Test manuel

DIGIFORMA_API_TOKEN=votre_token node src/index.js

Le 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 tools
digiforma_get_traineeA

Get a single trainee by id, including their training sessions.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe trainee's Digiforma id.

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 } } }).

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesThe GraphQL query or mutation document.
variablesNoOptional GraphQL variables object.

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

  1. 5 tool updatesv1.0.0
    • First observeddigiforma_get_trainee
    • First observeddigiforma_graphql
    • First observeddigiforma_introspect_schema
    • First observeddigiforma_list_trainees
    • First observeddigiforma_list_training_sessions

TDQS

A4.3/5.0

Scored across 5 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Turn any GraphQL endpoint into a set of MCP tools
    23
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    GraphQL 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.
    2
    7 npm
    3
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enhanced MCP server for GraphQL with filtered introspection and full variable support.
    38
    2
    7,197 npm
    3
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Automatically generates MCP tools from any GraphQL API by introspecting its schema, supporting queries, mutations, and authentication.
    5
    GPL 3.0