Mcp Dino

io.github.shennawardana23由 GitHub 帳號 shennawardana23 發布v0.1.0更新於 Nov 3, 2026

MCP server with an interactive dinosaur dashboard (MCP Apps UI). No API keys required.

發布方自己的服務:dino.markets

已驗證STDIO僅桌面開發者工具AI 與機器學習

概覽

AI 產生的概覽

以 Go 撰寫的參考型 MCP 伺服器,為助理提供三個恐龍工具,其中包含以 MCP App 形式呈現的互動式 HTML 儀表板。

可以做什麼
  • 取得一則隨機恐龍知識與對應的物種名稱
  • 提出恐龍相關問題,回傳一段通用的恐龍時代概述
  • 在用戶端內以 HTML 卡片格狀版面呈現 12 種恐龍的互動式儀表板,可依食性與時期篩選
  • 透過 HTTP 提供同一個儀表板與 JSON 恐龍資料介面,方便直接用瀏覽器開啟
適用情境
適合作為學習 MCP Apps 協定與 Go/Gin MCP 伺服器結構的範例專案,或在 Claude Desktop 中當作輕量的恐龍知識與儀表板小工具。不適合實際的科學研究或正式資料作業。
執行需求
以本機程序方式透過 stdio 執行;README 另提供監聽 9010 埠的 HTTP 模式。已發布的套件為 macOS arm64 版本。從原始碼建置需要 Go 1.25 以上版本,以及用於建置介面的 Node.js 18 以上版本;不需要 API 金鑰或環境變數。
安裝前請注意
儀表板的篩選是在呼叫工具時由伺服器端套用,因此介面內的按鈕只能在初始結果範圍內再縮小。ask 工具不論問題內容都會回傳同一段概述。README 中的 tunnel 目標會透過公開的 Cloudflare 網址對外暴露本機伺服器,使其可從本機以外存取。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Mcp Dino,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

[dino-mcp]

A production-grade MCP server with interactive HTML dashboard UI — written in Go, styled for delight.


📋 Table of Contents


🦕 What — and Why

dino-mcp is a reference implementation of the Model Context Protocol (MCP) in Go that demonstrates every layer of the modern MCP stack:

LayerImplementationWhy it matters
Transportstdio + Streamable HTTPWorks in Claude Desktop AND web browsers
MCP Apps@modelcontextprotocol/ext-apps App classInteractive HTML UIs in Claude Desktop iframes
Toolsdino_think, dino_ask, dino_dashboardTyped Go handlers, structured JSON results
Resources//go:embed HTML → text/html;profile=mcp-appSelf-contained ~11MB binary, zero deps at runtime

Whether you're building an MCP server from scratch, learning the MCP Apps protocol, or need a Go — Gin — ext-apps SDK integration blueprint, this project has you covered.


⚡ Quick Start

bash
# Clone & entergit 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 dashboardopen http://localhost:9010/dashboard
Expected output — click to expand
=== dino-mcp server ===Transport: httpListening 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"

🏗 Architecture at a Glance

mermaid
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

Data flows through three pipes:

PipeProtocolClientUse case
MCP ToolsJSON-RPC over stdioClaude DesktopText tools (dino_think, dino_ask)
MCP AppsJSON-RPC over stdio + postMessageClaude Desktop iframeInteractive UI (dino_dashboard)
StandaloneHTTP GETBrowserDirect access (/dashboard, /api/dinosaurs)

✨ Features

MCP Standards Compliance
FeatureStatusNotes
Tools (tools/list, tools/call)✅ Complete3 typed tools with structured JSON responses
Resources (resources/list, resources/read)✅ Complete//go:embed HTML served at ui:// URIs
MCP Apps protocol✅ Complete_meta.ui.resourceUri + ui/initialize handshake
stdio transport✅Claude Desktop, Cursor, Copilot
Streamable HTTP✅MCP Inspector, curl, browser, tunnel
SSE transport❌ RemovedDeprecated in MCP spec v2025-11-25
Developer Experience
  • 3-second build cycle — make build-fast && make dev-http
  • 7 integration tests — make test exercises every protocol method
  • Interactive debugging — make test-inspector launches MCP Inspector
  • Remote testing — make run-tunnel creates a public trycloudflare.com URL
  • No API keys — all dinosaur data is built into the binary
  • Zero runtime deps — single static binary with embedded HTML
Interactive Dashboard

The dino_dashboard tool renders an HTML card grid inside Claude Desktop's iframe:

  • Filter by diet — Carnivore, Herbivore, or show All
  • Filter by period — Triassic, Jurassic, Cretaceous
  • 12 dinosaur species — from T-Rex to Velociraptor
  • Fallback mode — open directly at http://localhost:9010/dashboard

Note: the filter is applied server-side at the time the tool is called. Once opened with a specific filter, the in-app filter buttons can only narrow further within that same result set — they can't widen back out to species the initial call excluded.

The HTML view is built with the official @modelcontextprotocol/ext-apps SDK and communicates via JSON-RPC over postMessage.


🎮 Try It

In Claude Desktop

Show me the dinosaur dashboard with carnivores

→ Claude detects the MCP App → renders an iframe → you see filterable dinosaur cards

In your browser

bash
open http://localhost:9010/dashboard

→ Standalone HTML with all dinosaur data fetched from the built-in REST API

With MCP Inspector

bash
make test-inspector

→ Opens http://localhost:5173 → connects to http://localhost:9010/mcp

Via curl

bash
# Initializecurl -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 toolsSID="<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_thinkcurl -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

🔧 Tool Reference

ToolTypeInputOutputExample Prompt
dino_thinkText{}Random fact + species JSON"Tell me a dinosaur fact"
dino_askText{"question": "..."}Answer + question JSON"What did T-Rex eat?"
dino_dashboardMCP App{"filter": "Carnivore"}HTML iframe + JSON data"Show me carnivore dinosaurs"

dino_ask currently returns the same general dinosaur-era overview regardless of the question asked — it doesn't yet branch on the question text. Tracked as a known limitation.

Example dino_think response:

json
{  "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"  }}

Example dino_dashboard response:

json
{  "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 Integration

CLI Mode (stdin/stdout)

Locate the binary and add to your claude_desktop_config.json:

json
{  "mcpServers": {    "dino-mcp": {      "command": "/absolute/path/to/mcp-dino/bin/dino-mcp",      "args": ["stdio"]    }  }}

After saving, restart Claude Desktop. You'll see hammer icons (🔨) on tools when chatting — click to invoke directly, or let Claude decide.

HTTP Mode (for debugging)

bash
make dev-http# Server starts on :9010

🛠 Development

Prerequisites

ToolVersionPurpose
Go≥ 1.25Server binary
Node.js≥ 18UI build (Vite)
cloudflaredanyTunnel for remote testing

Commands

bash
# Build — three optionsmake build            # Full: Vite UI + Go binarymake build-fast       # Quick: Go binary only (reuses existing UI)make build-ui         # Vite UI only
# Runmake dev-http         # HTTP mode with verbose loggingmake run-stdio        # stdio mode for Claude Desktopmake run-tunnel       # HTTP + Cloudflare Tunnel
# Test & verifymake test             # 7 integration tests — all must passmake test-inspector   # Launch MCP Inspector in browsermake lint             # go vet + go fmt
# Utilitymake help             # All targets with descriptionsmake clean            # Remove all build artifacts

Project Structure

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

🗺 Documentation Map

dino-mcp uses the Diátaxis framework — four documentation modes, each serving a different need.

For this audienceStart hereAudience
👋 New to the projectQuick StartEveryone
🧑‍💻 Adding a toolYour First ToolDevelopers
🦕 Adding a dinosaurAdd a DinosaurContent editors
🧪 Testing with InspectorTest with InspectorQA / Developers
🔍 Reference neededCLI ReferenceOperators
🏗 Understanding designArchitectureArchitects
🤖 Implementing via AIAGENTS.mdAI coding agents
📚 Deep architectureARCHITECTURE.mdSenior engineers
📐 Technical specsTECH_DESIGN.mdImplementation teams
⏳ Development historyMEMORY.mdAll contributors
📋 RoadmapPLAN.mdStakeholders
⚖️ Design trade-offsDESIGN.mdArchitects
🎯 Skills referenceSKILL.mdDevelopers / AI agents
🤝 How to contributeCONTRIBUTOR.mdContributors
📜 Code of conductCODE_CONDUCT.mdCommunity
📄 ADRsdocs/adr/Decision historians
🤖 LLM full contextllms-full.txtAI agents (RAG)

📊 Project Status

MVP ── Production ── Enhanced UI ── Ecosystem ── Advanced  ●                    ○               ○             ○
PhaseStatusHighlights
MVP✅ Complete3 tools, MCP Apps UI, 7 tests, docs
Production🔄 In progressGo unit tests, CI, rate limiting, Docker
Enhanced UI📅 PlannedReal-time data, comparison, timeline
Ecosystem📅 PlannedHomebrew, GitHub releases, MCP Registry
Advanced💭 FutureStreaming tool inputs, WebSocket sync

Build Metrics

MetricValue
Binary size~11 MB (compressed)
Binary typeMach-O 64-bit arm64
Go version1.25
MCP SDK versionv1.7.0
Dependencies30+ Go modules (all indirect)
UI bundle354 KB embedded HTML (single-file Vite)
Test coverage7/7 integration tests passing (shell-based; no Go unit tests yet)

📖 Further Reading


Built with ❤️ using Go, Gin, MCP Go SDK, and @modelcontextprotocol/ext-apps

來源:README.md,提交 da34724

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v0.1.0最新Sep 16, 2026

評分

已滿足適用檢查項的 40%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

    請在儲存庫或註冊中心條目中宣告授權條款。

其他 Dino 整合