dino-mcp
📋 목차
Related MCP server: Relay
🦕 무엇인가 — 그리고 왜인가
dino-mcp는 Go로 작성된 Model Context Protocol (MCP) 의 참조 구현체로, 현대 MCP 스택의 모든 레이어를 보여줍니다:
레이어 | 구현 | 중요한 이유 |
전송 |
| Claude Desktop 및 웹 브라우저에서 모두 작동 |
MCP Apps |
| Claude Desktop iframe 내 대화형 HTML UI |
도구 |
| 타입 있는 Go 핸들러, 구조화된 JSON 결과 |
리소스 |
| 자체 포함 ~11MB 바이너리, 런타임 의존성 제로 |
MCP 서버를 처음부터 구축하든, MCP Apps 프로토콜을 배우든, Go — Gin — ext-apps SDK 통합 청사진이 필요하든, 이 프로젝트가 모든 것을 다룹니다.
⚡ 빠른 시작
# 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"🏗 한눈에 보는 아키텍처
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데이터는 세 개의 파이프를 통해 흐릅니다:
파이프 | 프로토콜 | 클라이언트 | 사용 사례 |
MCP 도구 | stdio 위 JSON-RPC | Claude Desktop | 텍스트 도구 ( |
MCP Apps | stdio 위 JSON-RPC + postMessage | Claude Desktop iframe | 대화형 UI ( |
독립형 | HTTP GET | 브라우저 | 직접 접근 ( |
✨ 기능
기능 | 상태 | 참고 |
도구 ( | ✅ 완료 | 3개의 타입 있는 도구, 구조화된 JSON 응답 |
리소스 ( | ✅ 완료 |
|
MCP Apps 프로토콜 | ✅ 완료 |
|
stdio 전송 | ✅ | Claude Desktop, Cursor, Copilot |
Streamable HTTP | ✅ | MCP Inspector, curl, 브라우저, 터널 |
SSE 전송 | ❌ 제거됨 | MCP 스펙 v2025-11-25에서 폐기됨 |
3초 빌드 주기 —
make build-fast && make dev-http7개 통합 테스트 —
make test로 모든 프로토콜 메서드 실행대화형 디버깅 —
make test-inspector로 MCP Inspector 실행원격 테스트 —
make run-tunnel로 공개trycloudflare.comURL 생성API 키 불필요 — 모든 공룡 데이터가 바이너리에 내장됨
런타임 의존성 제로 — HTML이 포함된 단일 정적 바이너리
dino_dashboard 도구는 Claude Desktop의 iframe 내에 HTML 카드 그리드를 렌더링합니다:
식성별 필터 — 육식, 초식 또는 모두 표시
시대별 필터 — 트라이아스기, 쥐라기, 백악기
12종의 공룡 — 티라노사우루스부터 벨로키랍토르까지
대체 모드 —
http://localhost:9010/dashboard에서 직접 열기
참고: 필터는 도구가 호출될 때 서버 측에서 적용됩니다. 특정 필터로 열린 후, 앱 내 필터 버튼은 동일한 결과 집합 내에서만 더 좁힐 수 있습니다. 초기 호출에서 제외된 종으로 다시 확장할 수는 없습니다.
HTML 뷰는 공식 @modelcontextprotocol/ext-apps SDK로 구축되었으며, postMessage를 통해 JSON-RPC로 통신합니다.
🎮 사용해보기
Claude Desktop에서
Show me the dinosaur dashboard with carnivores→ Claude가 MCP App을 감지 → iframe 렌더링 → 필터 가능한 공룡 카드 확인
브라우저에서
open http://localhost:9010/dashboard→ 내장 REST API에서 모든 공룡 데이터를 가져오는 독립형 HTML
MCP Inspector로
make test-inspector→ http://localhost:5173 열기 → http://localhost:9010/mcp에 연결
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🔧 도구 참조
도구 | 유형 | 입력 | 출력 | 예시 프롬프트 |
| 텍스트 |
| 무작위 사실 + 종 JSON | "공룡 사실 하나 알려줘" |
| 텍스트 |
| 답변 + 질문 JSON | "티라노사우루스는 무엇을 먹었나요?" |
| MCP App |
| HTML iframe + JSON 데이터 | "육식 공룡을 보여줘" |
dino_ask는 현재 질문 내용에 관계없이 동일한 일반적인 공룡 시대 개요를 반환합니다. 질문 텍스트에 따라 분기하지 않습니다. 알려진 제한 사항으로 추적 중입니다.
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"
}
}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"
}
}💬 Claude Desktop 통합
CLI 모드 (stdin/stdout)
바이너리를 찾아 claude_desktop_config.json에 추가하세요:
{
"mcpServers": {
"dino-mcp": {
"command": "/absolute/path/to/mcp-dino/bin/dino-mcp",
"args": ["stdio"]
}
}
}저장 후 Claude Desktop을 다시 시작합니다. 채팅 중에 도구에 망치 아이콘(🔨)이 표시됩니다. 클릭하여 직접 호출하거나 Claude가 결정하도록 하세요.
HTTP 모드 (디버깅용)
make dev-http
# Server starts on :9010🛠 개발
사전 요구 사항
도구 | 버전 | 목적 |
≥ 1.25 | 서버 바이너리 | |
≥ 18 | UI 빌드 (Vite) | |
모든 버전 | 원격 테스트용 터널 |
명령어
# 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프로젝트 구조
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🗺 문서 맵
dino-mcp는 Diátaxis 프레임워크를 사용합니다. 네 가지 문서 모드로, 각각 다른 필요를 충족합니다.
이 대상 | 여기서 시작 | 대상 |
👋 프로젝트를 처음 접하는 경우 | 모두 | |
🧑💻 도구 추가 | 개발자 | |
🦕 공룡 추가 | 콘텐츠 편집자 | |
🧪 Inspector로 테스트 | QA / 개발자 | |
🔍 참조 필요 | 운영자 | |
🏗 설계 이해 | 아키텍트 | |
🤖 AI로 구현 | AI 코딩 에이전트 | |
📚 심층 아키텍처 | 시니어 엔지니어 | |
📐 기술 사양 | 구현 팀 | |
⏳ 개발 이력 | 모든 기여자 | |
📋 로드맵 | 이해관계자 | |
⚖️ 설계 트레이드오프 | 아키텍트 | |
🎯 기술 참조 | 개발자 / AI 에이전트 | |
🤝 기여 방법 | 기여자 | |
📜 행동 강령 | 커뮤니티 | |
📄 ADR | 결정 기록자 | |
🤖 LLM 전체 컨텍스트 | AI 에이전트 (RAG) |
📊 프로젝트 상태
MVP ── Production ── Enhanced UI ── Ecosystem ── Advanced
● ○ ○ ○단계 | 상태 | 하이라이트 |
MVP | ✅ 완료 | 3개 도구, MCP Apps UI, 7개 테스트, 문서 |
프로덕션 | 🔄 진행 중 | Go 유닛 테스트, CI, 속도 제한, Docker |
향상된 UI | 📅 계획됨 | 실시간 데이터, 비교, 타임라인 |
생태계 | 📅 계획됨 | Homebrew, GitHub 릴리스, MCP 레지스트리 |
고급 | 💭 미래 | 스트리밍 도구 입력, WebSocket 동기화 |
빌드 지표
지표 | 값 |
바이너리 크기 | ~11 MB (압축됨) |
바이너리 유형 | Mach-O 64-bit arm64 |
Go 버전 | 1.25 |
MCP SDK 버전 | v1.7.0 |
의존성 | 30+ Go 모듈 (모두 간접) |
UI 번들 | 354 KB 내장 HTML (단일 파일 Vite) |
테스트 커버리지 | 7/7 통합 테스트 통과 (셸 기반; 아직 Go 유닛 테스트 없음) |
📖 추가 자료
리소스 | 링크 |
MCP Specification | |
MCP Go SDK | |
MCP Apps Protocol | |
ext-apps SDK | |
Gin Web Framework | |
Go Programming Language |
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