MaximilianoRodrigoSoria

mcp-server-demo

Updated

Servidor MCP (Model Context Protocol) con FastMCP: tools de SQLite y una API de clima (Open-Meteo), más un resource de esquema.

mcp-server-demo

Servidor MCP (Model Context Protocol) que expone herramientas propias para que un LLM las use de forma estandarizada: consultas a una base de datos y a una API externa, con validación de entrada y manejo de errores.

Objetivo

Demostrar dominio del protocolo abierto que está estandarizando cómo los LLM acceden a herramientas y datos externos. En vez de acoplar tools a un framework concreto, se construye un servidor MCP reutilizable por cualquier cliente compatible (Claude Desktop, el sistema multi-agente de este portfolio, IDEs, etc.).

El servidor expone, como mínimo:

  • Tools — acciones invocables: consultar una base de datos local (SQLite) y llamar a una API externa (ej. clima, tipo de cambio, o una API pública de datos).
  • Resources — datos legibles por el modelo (ej. el esquema de la base, un catálogo).
  • (Opcional) Prompts — plantillas de prompt reutilizables parametrizadas.

Stack tecnológico sugerido

  • Opción A — Python: SDK oficial mcp (con FastMCP) — recomendado por rapidez de desarrollo
  • Opción B — TypeScript: @modelcontextprotocol/sdk — útil si se quiere mostrar versatilidad
  • Transporte: stdio para uso local con clientes de escritorio; Streamable HTTP para exposición remota
  • Base de datos: SQLite (con un dataset de ejemplo sembrado)
  • API externa: una API pública sin fricción (ej. Open-Meteo para clima, o exchangerate.host)
  • Validación: Pydantic (Python) o Zod (TS)
  • Cliente de prueba: MCP Inspector (npx @modelcontextprotocol/inspector) y/o Claude Desktop
  • Testing / calidad: pytest (o vitest), ruff/black (o eslint/prettier)

Estructura de carpetas propuesta (variante Python)

mcp-server-demo/
├── README.md
├── pyproject.toml
├── .env.example
├── data/
│   ├── seed.sql             # Esquema + datos de ejemplo
│   └── demo.db              # SQLite generada (git-ignored)
├── src/
│   ├── server.py            # Entry point: instancia FastMCP y registra todo
│   ├── config.py
│   ├── tools/
│   │   ├── db_tools.py      # query_customers, get_order_by_id, etc.
│   │   └── api_tools.py     # get_weather, get_exchange_rate, etc.
│   ├── resources/
│   │   └── schema.py        # Expone el esquema de la DB como resource
│   └── db/
│       └── connection.py    # Conexión y helpers (queries parametrizadas)
├── scripts/
│   └── seed_db.py           # Crea demo.db desde seed.sql
├── examples/
│   └── claude_desktop_config.json  # Config de ejemplo para registrar el server
└── tests/
    ├── test_db_tools.py
    └── test_api_tools.py

Checklist de implementación

Fase 1 — Setup

  • Inicializar el proyecto y elegir SDK (Python mcp/FastMCP o TypeScript).
  • Definir .env.example (base URL de la API externa, API key si aplica).
  • Crear seed.sql con un dominio simple (ej. clientes/pedidos) y el script seed_db.py.

Fase 2 — Tools de base de datos

  • Implementar la conexión con queries parametrizadas (evitar inyección SQL).
  • Exponer al menos 2 tools de DB (ej. search_customers, get_order_by_id) con schema de entrada tipado y descripciones claras.
  • Manejar el caso "sin resultados" y errores de forma explícita (mensajes útiles para el LLM).

Fase 3 — Tools de API externa

  • Implementar un cliente HTTP con timeout y reintentos.
  • Exponer al menos 1 tool que llame a la API externa (ej. get_weather(city)).
  • Normalizar la respuesta a un formato compacto y útil para el modelo.

Fase 4 — Resources y prompts

  • Exponer el esquema de la DB como resource para que el modelo sepa qué puede consultar.
  • (Opcional) Añadir un prompt template reutilizable (ej. "analiza estos pedidos").

Fase 5 — Robustez y seguridad

  • Validar todas las entradas antes de tocar DB o API.
  • Descripciones de tools precisas (el LLM decide cuándo usarlas según la descripción).
  • No exponer secretos en respuestas ni logs; leer keys desde entorno.
  • Logging básico de invocaciones (tool, args, latencia).

Fase 6 — Integración y prueba

  • Probar con MCP Inspector: listar tools/resources e invocarlos.
  • Registrar el server en Claude Desktop con examples/claude_desktop_config.json y hacer una prueba real.
  • (Opcional) Consumirlo desde multi-agent-orchestration para cerrar el portfolio.
  • Variante Streamable HTTP para demostrar exposición remota.

Fase 7 — Documentación

  • README con cómo levantar el server (stdio y HTTP) y cómo registrarlo en un cliente.
  • Tabla de tools/resources con descripción, parámetros y ejemplo.
  • ADR breve: elección de transporte (stdio vs HTTP) y del SDK.

Criterios de "terminado"

Un cliente MCP (Inspector o Claude Desktop) descubre las herramientas, un LLM las invoca correctamente contra la DB y la API externa, y las entradas están validadas y los errores manejados. El server funciona por stdio local y, opcionalmente, por HTTP remoto.

MCP Server · Populars

MCP Server · New

    bibinprathap

    veritasgraph

    VeritasGraph — open-source Knowledge Graph & GraphRAG framework on GitHub. Build multi-hop reasoning, ontology-aware retrieval, and verifiable attribution over your own data. Nodes, edges, RDF, linked-data — runs locally or in the cloud.

    Community bibinprathap
    sher1096

    KLinePic MCP Server and Agent API Examples

    MCP server and OpenAPI examples for AI agents that turn broker and exchange fills into annotated KLinePic trade-review charts

    Community sher1096
    zerx-lab

    FluxDown

    Rust 驱动的多协议下载管理器,支持 HTTP/FTP/BitTorrent 磁力链接及 HLS/DASH 流媒体,智能多线程加速与浏览器无缝集成。精美界面,极致性能,永久免费,零广告。

    Community zerx-lab
    MasihMoafi

    Project Elpis:

    You put an agent into an Elpis, and it becomes Elpis; Be Elpis my friend.

    Community MasihMoafi
    ROCTUP

    1C Metacode MCP Server

    MCP сервер с встроенным AI агентом для поиска по графу метаданных и кода конфигураций 1С

    Community ROCTUP