NATS消息服务协议

一个为大型语言模型如Claude提供NATS消息系统交互能力的MCP服务器,支持发布消息、订阅、请求-回复操作、JetStream流管理及键值存储等功能。

  • by Gooseus
  • TypeScript
  • 混合部署
  • 2 星标
  • 更新于
在 GitHub 查看 Gooseus/mcp-nats

使用说明

NATS MCP服务器

一个MCP(模型上下文协议)服务器,向Claude等LLM公开NATS消息传递功能。这使AI助手能够与NATS消息传递基础设施进行交互——发布消息、订阅、执行请求-回复操作、管理JetStream流和消费者,以及使用键值存储。

特性

  • 核心NATS运营:发布消息、订阅主题、请求回复模式
  • 实时订阅:监听具有超时和最大消息限制的消息,通配符支持
  • 急流:流管理、健康监控、持续发布并确认
  • 消费者管理:创建、列出、暂停、恢复、获取和删除JetStream消费者
  • 键值存储:具有过滤支持的获取、放置、删除和列出键
  • 对象存储:使用元数据存储和检索大型对象
  • 嵌入式文档:直接通过工具和资源访问NATS文档
  • 资源:查询服务器信息、列表流、KV桶和文档
  • 多个传输:Stdio(默认)或SSE用于网络可访问的HTTP服务器

需求

  • Node.js 20+(或 包子 发展)
  • 启用JetStream的NATS服务器
  • Docker(可选,用于运行测试)

安装

通过npx(推荐)

无需安装-直接运行:

npx mcp-nats

全局安装

npm install -g mcp-nats
mcp-nats

来源(用于开发)

git clone https://github.com/Gooseus/mcp-nats.git
cd mcp-nats
bun install
bun run start

快速开始

  1. 使用JetStream启动NATS服务器:
docker run -p 4222:4222 nats:latest -js
  1. 运行MCP服务器:
# Via npx
npx mcp-nats

# Or if installed globally
mcp-nats

# Or from source
bun run start
  1. 或者使用HTTP/SSE传输进行网络访问:
npx mcp-nats --transport=sse --port=3000
# Server will be available at http://localhost:3000/mcp
  1. MCP检验员测试:
npx @modelcontextprotocol/inspector npx mcp-nats

配置

环境变量

变量 描述 默认值
NATS_URL NATS服务器URL nats://localhost:4222
NATS_USER 身份验证用户名 -
NATS_PASS 身份验证密码 -
NATS_TOKEN 令牌身份验证 -
NATS_CREDS_PATH 凭据文件路径(NGS/Synadia) -

使用Synadia Cloud? 看 SYNADIA.md 获取完整的设置指南。

命令行选项

bun run src/index.ts [options]

Options:
  --transport=<type>  Transport type: 'stdio' (default) or 'sse'
  --port=<port>       HTTP port for SSE transport (default: 3000)
  --host=<host>       Host to bind for SSE transport (default: 0.0.0.0)
  --help, -h          Show help message

Claude桌面集成

添加到您的Claude桌面配置(~/Library/Application Support/Claude/claude_desktop_config.json 在Mac上):

{
  "mcpServers": {
    "nats": {
      "command": "npx",
      "args": ["mcp-nats"],
      "env": {
        "NATS_URL": "nats://localhost:4222"
      }
    }
  }
}

或者,如果全局安装:

{
  "mcpServers": {
    "nats": {
      "command": "mcp-nats",
      "env": {
        "NATS_URL": "nats://localhost:4222"
      }
    }
  }
}

或者来自Bun的消息来源:

{
  "mcpServers": {
    "nats": {
      "command": "bun",
      "args": ["/absolute/path/to/mcp-nats/src/index.ts"],
      "env": {
        "NATS_URL": "nats://localhost:4222"
      }
    }
  }
}

可用工具

核心NATS

工具 说明 参数
nats_publish 向主题发布消息 subject, payload, headers?
nats_request 请求回复模式 subject, payload, timeout?
nats_subscribe 订阅和收集消息 subject, timeout?, max_messages?, queue?
nats_server_info 获取NATS服务器连接信息 -

键值存储

工具 说明 参数
nats_kv_get 从KV桶中获取值 bucket, key
nats_kv_put 将价值存储在KV桶中 bucket, key, value
nats_kv_delete 从KV存储桶中删除密钥 bucket, key
nats_kv_list_keys 列出存储桶中的密钥 bucket, filter?

JetStream流

工具 说明 参数
nats_stream_list 列出所有JetStream流 -
nats_stream_info 获取流信息 stream
nats_stream_publish 发布到JetStream subject, payload
nats_stream_get_messages 从流中获取消息 stream, count?, startSeq?
nats_stream_health 通过消费者状态获取流健康状况 stream, lag_threshold?, ack_pending_threshold?

JetStream消费者

工具 说明 参数
nats_consumer_create 创造消费者 stream, name, deliver_policy?, ack_policy?, filter_subject?
nats_consumer_info 获取消费者详细信息 stream, consumer
nats_consumer_list 列出流媒体的消费者 stream
nats_consumer_delete 删除消费者 stream, consumer
nats_consumer_pause 暂停消费者 stream, consumer, until?
nats_consumer_resume 恢复消费者 stream, consumer
nats_consumer_fetch 从持久消费者那里获取消息 stream, consumer, batch?, expires?

对象存储

工具 说明 参数
nats_obj_list_buckets 列出所有对象存储桶 -
nats_obj_create_bucket 创建新的对象存储桶 bucket, description?, max_bytes?, storage?, ttl?
nats_obj_delete_bucket 删除对象存储桶 bucket
nats_obj_list 列出bucket中的对象 bucket
nats_obj_put 存储对象 bucket, name, data, description?
nats_obj_get 获取一个对象 bucket, name
nats_obj_delete 删除对象 bucket, name
nats_obj_info 获取对象元数据 bucket, name

文档

工具 说明 参数
nats_docs_list 列出可用的NATS文档主题 -
nats_docs_read 阅读有关主题的NATS文档 topic

可用资源

服务器资源

资源 URI 描述
溪流 nats://streams 列出所有带有元数据的JetStream流
KV铲斗 nats://kv KV铲斗信息
服务器信息 nats://server NATS服务器连接详细信息

文献资源

资源 URI 描述
受试者 nats://docs/subjects NATS主题命名约定和通配符
Acks nats://docs/acks NATS确认模式和语义
Pub/Sub nats://docs/pubsub 核心NATS发布-订阅模式
请求/回复 nats://docs/reqreply NATS请求-应答消息模式
JetStream nats://docs/jetstream JetStream概述和持久性
溪流 nats://docs/streams JetStream流配置和保留
消费者 nats://docs/consumers JetStream消费者类型和政策
标题 nats://docs/headers NATS消息头和元数据
关键价值 nats://docs/kv NATS键值存储指南
对象存储 nats://docs/objectstore NATS对象存储指南

苏格兰和南方能源公司运输

SSE传输允许网络客户端通过HTTP连接到MCP服务器。这使得:

  • Web浏览器客户端
  • 远程连接
  • 多个并发客户端
  • 与基于网络的人工智能工具集成
# Start with SSE transport
bun run start:sse

# Or with custom port
bun run src/index.ts --transport=sse --port=8080

终点:

  • GET /health -健康检查
  • POST /mcp -JSON-RPC端点(需要 Accept: application/json, text/event-stream)
  • GET /mcp -SSE流(需要 Accept: text/event-stream)

发展

# Run in development mode (with watch)
bun run dev

# Run with SSE in dev mode
bun run dev:sse

# Run tests
bun run test:up      # Start NATS container
bun test             # Run test suite
bun run test:down    # Stop NATS container

# Or all-in-one
bun run test:ci

# Build for Node.js distribution
bun run build

测试

该项目使用Bun的内置测试运行器和Docker Compose用于NATS服务器:

# Start test infrastructure
docker compose up -d

# Run tests (55 tests covering all tools, resources, and transports)
bun test

# Stop test infrastructure
docker compose down

示例用法

连接到Claude Desktop后,您可以要求Claude:

  • “向'orders.new'主题发布包含订单详细信息的消息”
  • “订阅'events.>'并收听10秒的消息”
  • “检查订单流中有哪些消息”
  • “在ORDERS流中创建一个只接收‘ORDERS.important’消息的消费者”
  • “列出EVENTS流中的所有消费者”
  • “检查订单流的运行状况”
  • 将此配置存储在密钥“app.settings”下的“config”KV bucket中
  • “将此大文件存储在'files'对象存储桶中”
  • “列出NATS服务器中的所有流”
  • “向'api.users.get'发送请求并等待响应”
  • “阅读JetStream消费者的NATS文档”

贡献

欢迎投稿!请随时提交拉取请求。

许可证

麻省理工学院

作者

肖恩 马林卡斯@鹅)