Skip to main content
Glama

Go MCP Go SDK Gin Tests License Binary Size


📋 Í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

stdio + Streamable HTTP

Funciona en Claude Desktop Y navegadores web

Apps MCP

Clase App de @modelcontextprotocol/ext-apps

UIs HTML interactivas en iframes de Claude Desktop

Herramientas

dino_think, dino_ask, dino_dashboard

Manejadores Go tipados, resultados JSON estructurados

Recursos

//go:embed HTML → text/html;profile=mcp-app

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:#fff

Los 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 (dino_think, dino_ask)

Apps MCP

JSON-RPC sobre stdio + postMessage

iframe de Claude Desktop

UI interactiva (dino_dashboard)

Independiente

HTTP GET

Navegador

Acceso directo (/dashboard, /api/dinosaurs)


✨ Características

Característica

Estado

Notas

Herramientas (tools/list, tools/call)

✅ Completo

3 herramientas tipadas con respuestas JSON estructuradas

Recursos (resources/list, resources/read)

✅ Completo

HTML con //go:embed servido en URIs ui://

Protocolo MCP Apps

✅ Completo

_meta.ui.resourceUri + handshake ui/initialize

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 segundosmake build-fast && make dev-http

  • 7 pruebas de integraciónmake test ejercita cada método del protocolo

  • Depuración interactivamake test-inspector lanza MCP Inspector

  • Pruebas remotasmake run-tunnel crea una URL pública trycloudflare.com

  • Sin 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

dino_think

Texto

{}

Dato aleatorio + JSON de especie

"Dime un dato de dinosaurio"

dino_ask

Texto

{"question": "..."}

Respuesta + JSON de pregunta

"¿Qué comía el T-Rex?"

dino_dashboard

App MCP

{"filter": "Carnivore"}

iframe HTML + datos JSON

"Muéstrame dinosaurios carnívoros"

dino_ask actualmente 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

Go

≥ 1.25

Binario del servidor

Node.js

≥ 18

Compilación de UI (Vite)

cloudflared

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 artifacts

Estructura 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

Inicio rápido

Todos

🧑💻 Añadiendo una herramienta

Tu primera herramienta

Desarrolladores

🦕 Añadiendo un dinosaurio

Añadir un dinosaurio

Editores de contenido

🧪 Probando con Inspector

Probar con Inspector

QA / Desarrolladores

🔍 Referencia necesaria

Referencia CLI

Operadores

🏗 Comprendiendo el diseño

Arquitectura

Arquitectos

🤖 Implementando mediante IA

AGENTS.md

Agentes de IA de código

📚 Arquitectura profunda

ARCHITECTURE.md

Ingenieros senior

📐 Especificaciones técnicas

TECH_DESIGN.md

Equipos de implementación

⏳ Historial de desarrollo

MEMORY.md

Todos los contribuidores

📋 Hoja de ruta

PLAN.md

Interesados

⚖️ Compensaciones de diseño

DESIGN.md

Arquitectos

🎯 Referencia de habilidades

SKILL.md

Desarrolladores / Agentes de IA

🤝 Cómo contribuir

CONTRIBUTOR.md

Contribuidores

📜 Código de conducta

CODE_CONDUCT.md

Comunidad

📄 ADRs

docs/adr/

Historiadores de decisiones

🤖 Contexto completo para LLM

llms-full.txt

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

spec.modelcontextprotocol.io

SDK Go de MCP

github.com/modelcontextprotocol/go-sdk

Protocolo de Apps MCP

modelcontextprotocol.io/docs/apps/overview

SDK de ext-apps

github.com/modelcontextprotocol/ext-apps

Framework Web Gin

github.com/gin-gonic/gin

Lenguaje de Programación Go

go.dev


F
license - not found
-
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
1Releases (12mo)

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

  • F
    license
    -
    quality
    D
    maintenance
    A 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.
  • A
    license
    -
    quality
    A
    maintenance
    A 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.
    11
    MIT
  • F
    license
    -
    quality
    C
    maintenance
    A 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.

View all related MCP servers

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.

View all MCP Connectors

Latest Blog Posts

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