dino-mcp
📋 Índice
Related MCP server: Relay
🦕 Qué — y por qué
dino-mcp es una implementación de referencia del Model Context Protocol (MCP) en Go que demuestra cada capa del stack moderno de MCP:
Capa | Implementación | Por qué es importante |
Transporte |
| Funciona en Claude Desktop Y navegadores web |
Apps MCP | Clase | UIs HTML interactivas en iframes de Claude Desktop |
Herramientas |
| Manejadores Go tipados, resultados JSON estructurados |
Recursos |
| Binario autónomo de ~11MB, cero dependencias en tiempo de ejecución |
Ya sea que estés construyendo un servidor MCP desde cero, aprendiendo el protocolo MCP Apps, o necesites un plano de integración Go — Gin — ext-apps SDK, este proyecto te cubre.
⚡ Inicio rápido
# Clone & enter
git clone https://github.com/shennawardana23/mcp-dino.git && cd mcp-dino
# Build & run in one shot (≈2 seconds)
make build-fast && make dev-http
# Open the standalone dashboard
open http://localhost:9010/dashboard=== dino-mcp server ===
Transport: http
Listening on :9010
[GIN] 2026/06/21 - 12:30:00 | 200 | 4.2ms | ::1 | GET "/dashboard"
[GIN] 2026/06/21 - 12:30:01 | 200 | 2.1ms | ::1 | GET "/api/dinosaurs"🏗 Arquitectura de un vistazo
flowchart TB
subgraph CLI["CLI Layer"]
STDIO["stdio subcommand"]
HTTP["http subcommand"]
end
subgraph SERVER["Server (internal/server/)"]
GIN["Gin Router :9010"]
MCPH["MCP StreamableHTTPHandler"]
CORS["CORS Middleware"]
TOOLS["Tools: think · ask · dashboard"]
RES["Resources: //go:embed HTML"]
end
subgraph UI["View (ui/src/)"]
APP["ext-apps App class"]
POST["postMessage protocol"]
end
subgraph FALLBACK["Standalone Fallback"]
DASH["/dashboard (HTML)"]
API["/api/dinosaurs (JSON)"]
end
CLI --> GIN
GIN --> CORS
CORS --> MCPH
MCPH --> TOOLS
TOOLS --> RES
RES --> APP
APP --> POST
MCPH -.->|"MCP Apps"| APP
GIN -.->|"direct route"| DASH
GIN -.->|"direct route"| API
style CLI fill:#1a1a2e,color:#e0e0e0,stroke:#2d2a44
style SERVER fill:#1a1a2e,color:#e0e0e0,stroke:#2d2a44
style UI fill:#1a1a2e,color:#e0e0e0,stroke:#2d2a44
style FALLBACK fill:#1a1a2e,color:#e0e0e0,stroke:#2d2a44
style STDIO fill:#2d2a44,color:#a78bfa
style HTTP fill:#2d2a44,color:#a78bfa
style GIN fill:#0099e5,color:#fff
style MCPH fill:#a78bfa,color:#fff
style TOOLS fill:#22c55e,color:#fff
style RES fill:#22c55e,color:#fff
style APP fill:#facc15,color:#000
style POST fill:#facc15,color:#000
style DASH fill:#f87171,color:#fff
style API fill:#f87171,color:#fffLos datos fluyen a través de tres tuberías:
Tubería | Protocolo | Cliente | Caso de uso |
Herramientas MCP | JSON-RPC sobre stdio | Claude Desktop | Herramientas de texto ( |
Apps MCP | JSON-RPC sobre stdio + postMessage | iframe de Claude Desktop | UI interactiva ( |
Independiente | HTTP GET | Navegador | Acceso directo ( |
✨ Características
Característica | Estado | Notas |
Herramientas ( | ✅ Completo | 3 herramientas tipadas con respuestas JSON estructuradas |
Recursos ( | ✅ Completo | HTML con |
Protocolo MCP Apps | ✅ Completo |
|
Transporte stdio | ✅ | Claude Desktop, Cursor, Copilot |
HTTP transmisible | ✅ | MCP Inspector, curl, navegador, túnel |
Transporte SSE | ❌ Eliminado | Obsoleto en especificación MCP v2025-11-25 |
Ciclo de compilación de 3 segundos —
make build-fast && make dev-http7 pruebas de integración —
make testejercita cada método del protocoloDepuración interactiva —
make test-inspectorlanza MCP InspectorPruebas remotas —
make run-tunnelcrea una URL públicatrycloudflare.comSin claves API — todos los datos de dinosaurios están integrados en el binario
Cero dependencias en tiempo de ejecución — binario estático único con HTML incrustado
La herramienta dino_dashboard renderiza una cuadrícula de tarjetas HTML dentro del iframe de Claude Desktop:
Filtrar por dieta — Carnívoro, Herbívoro o mostrar Todos
Filtrar por período — Triásico, Jurásico, Cretácico
12 especies de dinosaurios — desde T-Rex hasta Velociraptor
Modo de respaldo — abrir directamente en
http://localhost:9010/dashboard
Nota: el filtro se aplica del lado del servidor en el momento en que se llama a la herramienta. Una vez abierto con un filtro específico, los botones de filtro dentro de la aplicación solo pueden reducir aún más dentro de ese mismo conjunto de resultados — no pueden ampliar de nuevo a especies que la llamada inicial excluyó.
La vista HTML está construida con el SDK oficial @modelcontextprotocol/ext-apps y se comunica mediante JSON-RPC sobre postMessage.
🎮 Pruébalo
En Claude Desktop
Show me the dinosaur dashboard with carnivores→ Claude detecta la App MCP → renderiza un iframe → ves tarjetas de dinosaurios filtrables
En tu navegador
open http://localhost:9010/dashboard→ HTML independiente con todos los datos de dinosaurios obtenidos de la API REST incorporada
Con MCP Inspector
make test-inspector→ Abre http://localhost:5173 → se conecta a http://localhost:9010/mcp
Mediante curl
# Initialize
curl -s -X POST http://localhost:9010/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"curl","version":"1.0"}}}' \
| python3 -m json.tool
# List tools
SID="<session-id-from-above>"
curl -s -X POST http://localhost:9010/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "Mcp-Session-Id: $SID" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}' \
| python3 -m json.tool
# Call dino_think
curl -s -X POST http://localhost:9010/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "Mcp-Session-Id: $SID" \
-d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"dino_think","arguments":{}}}' \
| python3 -m json.tool🔧 Referencia de herramientas
Herramienta | Tipo | Entrada | Salida | Ejemplo de prompt |
| Texto |
| Dato aleatorio + JSON de especie | "Dime un dato de dinosaurio" |
| Texto |
| Respuesta + JSON de pregunta | "¿Qué comía el T-Rex?" |
| App MCP |
| iframe HTML + datos JSON | "Muéstrame dinosaurios carnívoros" |
dino_askactualmente devuelve la misma visión general de la era de los dinosaurios independientemente de la pregunta formulada — aún no se ramifica según el texto de la pregunta. Se registra como una limitación conocida.
Ejemplo de respuesta de dino_think:
{
"content": [
{ "type": "text", "text": "🦕 Did you know? The Velociraptor was only about the size of a turkey!" }
],
"structuredContent": {
"fact": "The Velociraptor was only about the size of a turkey",
"species": "Velociraptor"
}
}Ejemplo de respuesta de dino_dashboard:
{
"content": [
{ "type": "text", "text": "Displaying dinosaur dashboard with 4 dinosaurs (filter: Carnivore)" }
],
"structuredContent": {
"filter": "Carnivore",
"dinosaurs": [
{
"name": "Tyrannosaurus Rex",
"period": "Cretaceous",
"diet": "Carnivore",
"length": "40 ft (12 m)",
"weight": "9 tons (8,000 kg)",
"funFact": "T-Rex had the strongest bite of any land animal ever",
"imageStyle": "bg-red-900"
}
],
"timestamp": "2026-06-21T12:00:00Z"
}
}💬 Integración con Claude Desktop
Modo CLI (stdin/stdout)
Localiza el binario y agrégalo a tu claude_desktop_config.json:
{
"mcpServers": {
"dino-mcp": {
"command": "/absolute/path/to/mcp-dino/bin/dino-mcp",
"args": ["stdio"]
}
}
}Después de guardar, reinicia Claude Desktop. Verás íconos de martillo (🔨) en las herramientas al chatear — haz clic para invocar directamente, o deja que Claude decida.
Modo HTTP (para depuración)
make dev-http
# Server starts on :9010🛠 Desarrollo
Requisitos previos
Herramienta | Versión | Propósito |
≥ 1.25 | Binario del servidor | |
≥ 18 | Compilación de UI (Vite) | |
cualquiera | Túnel para pruebas remotas |
Comandos
# Build — three options
make build # Full: Vite UI + Go binary
make build-fast # Quick: Go binary only (reuses existing UI)
make build-ui # Vite UI only
# Run
make dev-http # HTTP mode with verbose logging
make run-stdio # stdio mode for Claude Desktop
make run-tunnel # HTTP + Cloudflare Tunnel
# Test & verify
make test # 7 integration tests — all must pass
make test-inspector # Launch MCP Inspector in browser
make lint # go vet + go fmt
# Utility
make help # All targets with descriptions
make clean # Remove all build artifactsEstructura del proyecto
mcp-dino/
├── bin/ # Go build output (~11MB static binary)
├── cmd/dino-mcp/main.go # CLI entry point (stdio | http | help)
├── internal/
│ ├── server/
│ │ └── server.go # Composition root: mcp.Server + Gin + CORS
│ ├── tools/
│ │ ├── tools.go # Shared types, constants, helpers
│ │ ├── think.go # RegisterThink (dino_think tool)
│ │ ├── ask.go # RegisterAsk (dino_ask tool)
│ │ └── dashboard.go # RegisterDashboardTool + 12 dino species + REST API
│ └── resources/
│ ├── dashboard.go # RegisterDashboardResource + //go:embed HTML
│ └── dashboard_ui.html # Vite-built HTML (354KB)
├── ui/
│ └── src/
│ └── mcp-app.ts # ext-apps App class + postMessage
├── docs/ # Diátaxis documentation (see below)
├── test_mcp.sh # 7 integration tests
├── AGENTS.md # AI agent instructions (canonical)
├── ARCHITECTURE.md # C4 diagrams + sequence flows
├── TECH_DESIGN.md # Interface contracts + data model
├── Makefile # All targets
├── go.mod + go.sum # Go dependencies
└── README.md # ← you are here🗺 Mapa de documentación
dino-mcp utiliza el marco Diátaxis — cuatro modos de documentación, cada uno para una necesidad diferente.
Para esta audiencia | Empieza aquí | Audiencia |
👋 Nuevo en el proyecto | Todos | |
🧑💻 Añadiendo una herramienta | Desarrolladores | |
🦕 Añadiendo un dinosaurio | Editores de contenido | |
🧪 Probando con Inspector | QA / Desarrolladores | |
🔍 Referencia necesaria | Operadores | |
🏗 Comprendiendo el diseño | Arquitectos | |
🤖 Implementando mediante IA | Agentes de IA de código | |
📚 Arquitectura profunda | Ingenieros senior | |
📐 Especificaciones técnicas | Equipos de implementación | |
⏳ Historial de desarrollo | Todos los contribuidores | |
📋 Hoja de ruta | Interesados | |
⚖️ Compensaciones de diseño | Arquitectos | |
🎯 Referencia de habilidades | Desarrolladores / Agentes de IA | |
🤝 Cómo contribuir | Contribuidores | |
📜 Código de conducta | Comunidad | |
📄 ADRs | Historiadores de decisiones | |
🤖 Contexto completo para LLM | Agentes de IA (RAG) |
📊 Estado del proyecto
MVP ── Production ── Enhanced UI ── Ecosystem ── Advanced
● ○ ○ ○Fase | Estado | Destacados |
MVP | ✅ Completo | 3 herramientas, UI MCP Apps, 7 pruebas, docs |
Producción | 🔄 En progreso | Pruebas unitarias Go, CI, limitación de tasa, Docker |
UI mejorada | 📅 Planificado | Datos en tiempo real, comparación, línea de tiempo |
Ecosistema | 📅 Planificado | Homebrew, lanzamientos GitHub, Registro MCP |
Avanzado | 💭 Futuro | Entradas de herramientas en streaming, sincronización WebSocket |
Métricas de compilación
Métrica | Valor |
Tamaño del binario | ~11 MB (comprimido) |
Tipo de binario | Mach-O 64-bit arm64 |
Versión de Go | 1.25 |
Versión del SDK MCP | v1.7.0 |
Dependencias | 30+ módulos Go (todos indirectos) |
Paquete de UI | 354 KB HTML incrustado (Vite de archivo único) |
Cobertura de pruebas | 7/7 pruebas de integración pasando (basadas en shell; aún no hay pruebas unitarias Go) |
📖 Lecturas adicionales
Recurso | Enlace |
Especificación MCP | |
SDK Go de MCP | |
Protocolo de Apps MCP | |
SDK de ext-apps | |
Framework Web Gin | |
Lenguaje de Programación Go |
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Flicense-qualityDmaintenanceA production-ready MCP server with tools for weather, calculator, and mock database queries, plus resources and prompt templates, featuring a glassmorphism admin dashboard and WebSocket support.
- Alicense-qualityAmaintenanceA single MCP server with 40 tools across 7 categories - PM, Research, Brand, UX, GTM, File, and Web. Built in Go, zero dependencies, one binary. Handles file operations, web fetching, screenshots, search, and planning workflows through one MCP connection.11MIT
- Flicense-qualityCmaintenanceA self-hosted MCP gateway that aggregates all your MCP servers behind a single Streamable HTTP endpoint, with automatic registry discovery (19,000+ servers), on-demand Docker provisioning, multi-device support via SSH, OAuth2 PKCE authentication, and a workflow engine for saving and replaying multi-step tool sequences.
- Flicense-qualityBmaintenanceAn educational MCP server that controls a live dashboard on Cloudflare Workers, enabling real-time toggling of features, updating stats, and setting messages via 8 MCP tools.
Related MCP Connectors
A MCP server built for developers enabling Git based project management with project and personal…
MCP server for InsForge BaaS — database, storage, edge functions, and deployments
Go MCP server for GitLab: 2 dynamic tools reach 1000+ REST/GraphQL actions. Free/CE, no paid tier.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/shennawardana23/mcp-dino'
If you have feedback or need assistance with the MCP directory API, please join our Discord server