Skip to main content
Glama
ruben-salas20

Nimbus Copiloto MCP Server

Nimbus Copiloto — Helpdesk MCP Server

MCP server for Helpdesk Nimbus, the support ticketing platform of Nimbus S.A.S. It lets an AI assistant operate the helpdesk: search cases, view history, escalate, respond, and measure SLA compliance.

This is a learning environment. Nimbus S.A.S. is a fictional company. The repository exists to learn FastMCP by building a project with the shape and demands of a real one.


Quick start

# 1. Dependencias
uv sync

# 2. Sembrar la base de datos
uv run python -m backend.seed

# 3. Levantar el backend de la empresa (terminal aparte, déjalo corriendo)
uv run uvicorn backend.main:app --reload --port 8000

# 4. Correr las pruebas
uv run pytest -v

With the backend running: http://127.0.0.1:8000/docs

Related MCP server: tickiti-mcp

The MCP server

# Correrlo
uv run python -m nimbus_mcp.server

# Inspeccionarlo en el navegador
uv run fastmcp dev src/nimbus_mcp/server.py

It is also available inside Claude Code thanks to .mcp.json. Check with /mcp.


Structure

mcp-test/
├── backend/              # API interna de Nimbus — NO SE TOCA
│   ├── main.py           #   FastAPI: tickets, clientes, agentes, KB, métricas
│   ├── db.py             #   Esquema SQLite
│   └── seed.py           #   Generador de datos de prueba
├── src/nimbus_mcp/       # El servidor MCP — aquí trabajas
│   └── server.py
├── tests/                # Pruebas
├── data/nimbus.db        # Base sembrada (regenerable)
└── docs/                 # Documentación del proyecto

Documentation

Document

What it's for

docs/ONBOARDING.md

Start here. What MCP is, how to get everything running, learning path

docs/RUTA_AI_ENGINEER.md

The long plan: 8 phases to AI Engineer

docs/EMPRESA.md

The company, the team, why the project exists

docs/PRODUCTO.md

The domain: tickets, statuses, SLA, glossary

docs/API_BACKEND.md

API contract consumed by the MCP

docs/BACKLOG.md

Phase 1 — the MCP tickets

docs/BACKLOG_FASE_2.md

Phase 2 — the copilot tickets

docs/BITACORA.md

Where the last session left off

The plan

This repository is Phase 1 of eight. The system grows in layers: MCP → copilot → evals → RAG → guardrails → observability → own models → production. The complete map is in docs/RUTA_AI_ENGINEER.md.

Versions

Python 3.13 · FastMCP 3.4.7 · FastAPI 0.141 · pytest 9.1

Available Tools

3 tools
consultar_ticketA

Consulta los datos de un ticket específico. Toca la red para obtener los datos. Únicamente lee información de un ticket, no modifica nada.

Casos de uso:

  • El agente pregunta por un ticket con su código.

Formato de código: TCK-0000 - Pudiendo ser los 0000 cualquier número. El código no distingue entre mayúsculas y minúsculas.

ParametersJSON Schema
NameRequiredDescriptionDefault
codigoYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

No annotations were provided, so the description carries the full burden of disclosing behavior. It explains this is a read-only network operation, provides the exact code format, and notes case-insensitivity. It could be more explicit about what happens when a ticket is not found or network errors occur, but for a read-only lookup tool, this is quite thorough.

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 well-structured with a clear summary, context, and use cases. It avoids unnecessary fluff and uses whitespace effectively. Every section adds value, from the primary description to the code format details and case-insensitivity note.

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 simple read-only query tool with one parameter, the description covers the essentials: what it does, how to invoke the parameter, and format validation rules. It's accessed via read-only operation, has no nested objects, and has an output schema. Could add network/rate-limit caveats, but those are typically beyond the scope of a tool description.

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?

With 0% schema coverage and a single L2 parameter 'codigo', the description does the heavy lifting by defining the format: 'TCK-0000' with the number portion being any number. While the description could add regex or validation rules, it provides the key semantic information: the acceptance criteria for the code format and that it's case-insensitive. However, it doesn't explicitly state what the tool is FOR (to fetch a ticket by its id), which is implied by the tool name 'consultar_ticket.'

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 uses a specific verb+resource combination ('Consulta los datos de un ticket específico') and clearly defines what it does. It distinguishes itself from siblings by focusing exclusively on single-ticket queries, while 'listar_estados_de_ticket' implies a different purpose. The code format and use cases further clarify the tool's intended purpose.

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 description explicitly states a primary use case ('El agente pregunta por un ticket con su código') and clarifies it's read-only ('Únicamente lee información de un ticket, no modifica nada'). It also explains that it hits the network ('Toca la red'), implying it may have performance implications. However, it doesn't explicitly mention when NOT to use it or name alternative tools.

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

listar_estados_de_ticketA

Lista los estados posibles de un ticket y su explicación. No toca la red, es una tool únicamente informativa, no devuelve los datos de un ticket específico sino de la lista de estados posibles y válidos que trabajamos en Nimbus.

Casos de uso:

  • El agente pregunta por los estados que existen para un ticket.

  • El agente no entiende por qué el estado de un ticket y necesitamos aclararlo.

  • El agente pide explicación de por qué no puede tocar un ticket.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

The description states that the tool is purely informational ('No toca la red, es una tool únicamente informativa') and does not return specific ticket data. Since no annotations are provided, this disclosure is valuable because it explicitly tells the agent that this tool has no side effects and is safe to call. It also clarifies the scope of the return (list of valid states, not ticket-specific data), adding context beyond the schema.

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?

The description is concise, with two short paragraphs and a bulleted list of use cases. Every sentence adds value: the first clarifies the scope, the second lists use cases. However, the use cases could be seen as slightly repetitive (the second and third are similar), but overall it is efficient and well-structured.

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?

Given the tool is a simple zero-parameter informational tool, the description is complete. It explains what the tool returns, that it is non-network and informational, and provides usage examples. The output schema exists (context signal), so return value specifics are presumably covered there. The description provides sufficient context for an agent to invoke this tool appropriately, distinguishing it from the sibling tools.

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, so the description's role is to explain the output, which it does (lists possible states and explanations). The schema has no properties, so there is no parameter information to add. With 0 parameters, baseline is 4, and the description adequately compensates by explaining what the tool returns and its informational nature.

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 clearly states what the tool does: it lists the possible ticket states and their explanations. It is distinguished from siblings by explicitly stating it is informational only and does not return data for a specific ticket, which contrasts with consultar_ticket. The verb 'Lista' specifies the action and resource (estados de ticket).

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?

The description provides explicit usage cases: when the agent asks about existing states, when the agent doesn't understand a ticket state, and when the agent needs an explanation of why it cannot touch a ticket. It also explicitly states when NOT to use it: it does not return data for a specific ticket. This clearly differentiates from consultar_ticket, which would be the alternative for specific ticket data.

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

pingA

Verifica que el servidor MCP de Nimbus esta vivo.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states the basic function of checking server aliveness, without mentioning potential side effects, whether it's a read-only operation, response behavior, or error handling. For a simple health check, more detail (e.g., that it makes no changes, what it returns) would be expected.

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, clear sentence with no extraneous information. It is entirely front-loaded and efficient.

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?

Given the tool's simplicity and the presence of an output schema, the description is largely complete for a health-check tool. However, it lacks optional details like common failure modes (server down, timeouts) or typical use cases beyond 'is it alive', which leaves some ambiguity for the agent about handling results. Still, for a basic ping, it is adequate.

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 reflects this (100% coverage). The baseline for 0 parameters is 4, and there is no parameter information to elaborate on. The description correctly adds nothing about parameters, which 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 clearly states the tool's purpose: to verify the Nimbus MCP server is alive. It uses a specific verb ('Verifica') and resource ('servidor MCP de Nimbus'). This is distinct from sibling tools (list and consult tickets), which are about ticket operations.

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 description implies when to use the tool (as a health check for the server) but does not explicitly mention alternatives or scenarios where it should not be used. Given the sibling tools are unrelated, the context is clear, but there is no explicit guidance on usage.

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. 3 tool updatesv0.1.0
    • First observedconsultar_ticket
    • First observedlistar_estados_de_ticket
    • First observedping

TDQS

A4.3/5.0

Scored across 3 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: ping checks server liveness, listar_estados_de_ticket provides reference information about ticket states, and consultar_ticket retrieves a specific ticket's data. There is no ambiguity or overlap between them.

Naming Consistency5/5

Tool names follow a consistent verb_noun pattern (ping, listar_estados_de_ticket, consultar_ticket). Although 'ping' is a single verb, it is a standard convention and the other two follow the same style, ensuring predictability.

Tool Count5/5

With 3 tools, the server is appropriately scoped for its narrow purpose of ticket status lookup and retrieval. Each tool is essential and there are no redundant or missing operations for the stated functionality.

Completeness4/5

The server covers the core read operations: checking health, listing possible ticket states, and fetching a specific ticket. A notable gap is the lack of a 'list_all_tickets' tool, but given the description, the server appears intentionally focused on individual ticket queries, so this is a minor omission rather than a critical failure.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    F
    maintenance
    An MCP-compliant server that enables AI assistants like Claude Desktop to access and analyze Intercom support tickets with full conversation history.
    4
    8
    Apache 2.0
  • A
    license
    B
    quality
    B
    maintenance
    An MCP server that exposes the Tickiti helpdesk API to AI assistants, enabling ticket management and helpdesk operations via natural language.
    11
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    MCP server for Nimbus Operations Copilot that enables AI agents to search help docs, customer data, invoices, and tickets, and propose refunds/tickets with human approval for writes.
    -
  • F
    license
    Not graded
    quality
    B
    maintenance
    MCP server that provides IT support tools to search known incidents, check ticket status, and create ticket drafts, enabling an AI assistant to help users with IT support queries.
    -