Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者提供的说明(英文原文)
Explore likely radio services, channels, and emissions from 108 MHz to 1 GHz.
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json
{
"mcpServers": {
"mellow-tapir": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/guycole/mellow-tapir-mcp:1.0.2"
]
}
}
}在终端中运行这条命令
claude mcp add mellow-tapir -- docker run -i --rm ghcr.io/guycole/mellow-tapir-mcp:1.0.2粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"mellow-tapir": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/guycole/mellow-tapir-mcp:1.0.2"
]
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"mellow-tapir": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/guycole/mellow-tapir-mcp:1.0.2"
]
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。
你的选择通过 Cookie 保存在这台设备上,无需账户。
这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月7日
注册名称已通过 GitHub 账户 guycole 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
它在你的电脑上运行,没有互联网端点
在你的电脑上运行,改用本地设置
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
GitHub 仓库最后更新于–,最新版本(1.0.2)于2个月前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Docker。
同一分类中有:Spec Driven Development, Remote Desktop Commander, Zendesk
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Zendesk MCP Pack — tickets, users, organizations via OAuth.
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
This directory contains an MCP server with both stdio and streamable HTTP transports. The server uses data from src/tapir_schema/seed.json and source schema text from src/tapir_schema/schema.sql, then serves a read-only SQLite catalog.
Use the existing local virtual environment:
cd src/tapir_mcp_server
./venv/bin/python -m pip install -r requirements.txt
cd /Users/gsc/github/mellow-tapir/src/tapir_mcp_server
./venv/bin/python -m mcp_server.build_db \ --db-path data/tapir.sqlite \ --seed-path ../tapir_schema/seed.json \ --schema-path ../tapir_schema/schema.sql
cd /Users/gsc/github/mellow-tapir/src/tapir_mcp_server
TAPIR_DB_PATH=data/tapir.sqlite \ TAPIR_SEED_PATH=../tapir_schema/seed.json \ TAPIR_SCHEMA_PATH=../tapir_schema/schema.sql \ ./venv/bin/python -m mcp_server --transport stdio
cd /Users/gsc/github/mellow-tapir/src/tapir_mcp_server
TAPIR_DB_PATH=data/tapir.sqlite \ TAPIR_SEED_PATH=../tapir_schema/seed.json \ TAPIR_SCHEMA_PATH=../tapir_schema/schema.sql \ REFERENCE_LLM_MODEL=gpt-oss:20b \ OLLAMA_BASE_URL=http://127.0.0.1:11434 \ ./venv/bin/python -m mcp_server \ --transport http --host 0.0.0.0 --port 8000 --path /mcp
Start Ollama and ensure the reference model is available:
ollama serve
In another terminal:
ollama pull gpt-oss:20b
ollama run gpt-oss:20b "Summarize the purpose of this MCP server in one sentence."
Run the MCP server with the same local Ollama endpoint:
cd /Users/gsc/github/mellow-tapir/src/tapir_mcp_server
TAPIR_DB_PATH=data/tapir.sqlite \ TAPIR_SEED_PATH=../tapir_schema/seed.json \ TAPIR_SCHEMA_PATH=../tapir_schema/schema.sql \ REFERENCE_LLM_MODEL=gpt-oss:20b \ OLLAMA_BASE_URL=http://127.0.0.1:11434 \ ./venv/bin/python -m mcp_server --transport http --host 127.0.0.1 --port 8000 --path /mcp
When connected with an MCP client, call ask_reference_model with a test prompt. If Ollama is reachable and the model is present, the tool returns a response body and metadata including model and done status.
This sample session verifies end-to-end behavior:
gpt-oss:20b.Terminal 1: start Ollama
ollama serve
Terminal 2: pull model and optional sanity prompt
ollama pull gpt-oss:20b
ollama run gpt-oss:20b "Reply with: Ollama ready"
Terminal 3: start Tapir MCP server
cd /Users/gsc/github/mellow-tapir/src/tapir_mcp_server
./venv/bin/python -m mcp_server.build_db \ --db-path data/tapir.sqlite \ --seed-path ../tapir_schema/seed.json \ --schema-path ../tapir_schema/schema.sql
TAPIR_DB_PATH=data/tapir.sqlite \ TAPIR_SEED_PATH=../tapir_schema/seed.json \ TAPIR_SCHEMA_PATH=../tapir_schema/schema.sql \ REFERENCE_LLM_MODEL=gpt-oss:20b \ OLLAMA_BASE_URL=http://127.0.0.1:11434 \ ./venv/bin/python -m mcp_server --transport http --host 127.0.0.1 --port 8000 --path /mcp
Terminal 4: sample client requests
cd /Users/gsc/github/mellow-tapir
/Users/gsc/github/mellow-tapir/src/tapir_mcp_server/venv/bin/python - <<'PY' import anyio from mcp.client.session import ClientSession from mcp.client.streamable_http import streamable_http_client
async def main() -> None: async with streamable_http_client("http://127.0.0.1:8000/mcp") as ( read_stream, write_stream, ): session = ClientSession(read_stream, write_stream) async with session: await session.initialize()
classify = await session.call_tool( "classify_frequency", {"frequency": "121.5"} ) print("classify_frequency:") print(classify.content[0].text)
llm = await session.call_tool( "ask_reference_model", { "prompt": "Explain 121.5 MHz in one sentence.", "temperature": 0.1, }, ) print("ask_reference_model:") print(llm.content[0].text)
anyio.run(main) PY
Expected outcome:
classify_frequency returns aviation emergency channel data around 121.5 MHz.ask_reference_model returns a completion from local Ollama model gpt-oss:20b.classify_frequencyfrequency as numeric Hz, MHz string (121.5), or explicit unit (121.5MHz).query_channelslower_hz, upper_hz, optional limit.search_servicesservice_query, optional limit.execute_readonly_sqlSELECT or WITH query and optional limit.ask_reference_modelprompt, optional system_prompt, optional temperature.gpt-oss:20b (override with REFERENCE_LLM_MODEL).tapir://metadatatapir://sources/seed-jsontapir://sources/schema-sqlBuild locally:
cd /Users/gsc/github/mellow-tapir
docker build -f src/tapir_mcp_server/Dockerfile -t tapir-mcp:local .
Run:
docker run --rm -p 8080:8080 \
-e OLLAMA_BASE_URL=http://host.docker.internal:11434 \ tapir-mcp:local
The GitHub Actions workflow in .github/workflows/tapir-mcp-server-image.yml publishes images to GitHub Container Registry.
The SQLite database in data/tapir.sqlite is generated from two source files:
src/tapir_schema/seed.json: canonical editable catalog of bands, emissions, and channels.src/tapir_schema/schema.sql: source PostgreSQL schema retained for provenance and parity checks.Generation is handled by mcp_server.build_db, which:
band, band_emission, channel, dataset_metadata),seed.json,When updating the dataset in the future:
src/tapir_schema/seed.json.src/tapir_schema/schema.sql if source-schema intent changed.cd /Users/gsc/github/mellow-tapir/src/tapir_mcp_server
./venv/bin/python -m mcp_server.build_db \ --db-path data/tapir.sqlite \ --seed-path ../tapir_schema/seed.json \ --schema-path ../tapir_schema/schema.sql
The container image build also runs this same build step during docker build, so image contents stay aligned with the latest checked-in seed.json and schema.sql.