ProDisco(渐进式披露MCP服务器)
ProDisco是一个 渐进式披露MCP服务器框架:您提供一个TypeScript库列表,ProDisco为它们的API建立索引以供发现,沙盒只执行使用这些库的代码。它遵循Anthropic的 渐进呈现 模式:MCP服务器公开搜索工具,代理发现这些工具来编写代码,在沙箱中执行代码,只有最终的控制台输出返回给代理。
Kubernetes/可观察性只是一个例子 配置(参见 examples/).您同样可以围绕AWS/GCP SDK、Postgres客户端、内部TypeScript SDK等构建MCP服务器。
注意:ProDisco更喜欢从TypeScript声明文件中索引API(.d.ts).如果图书馆不发货.d.ts,ProDisco可以退回到索引 ESM JavaScript 导出(尽力而为;类型默认为any).不支持仅包含CommonJS的JavaScript包,不支持键入。
演示用例(可选):
- Kubernetes访问 通过
@kubernetes/client-node - 普罗米修斯指标 通过
@prodisco/prometheus-client - 洛基原木 通过
@prodisco/loki-client - 分析 通过
simple-statistics

建筑
每个MCP客户端会话都有自己的隔离沙盒CRD(Kata-VM),每个会话都有gRPC连接、空闲超时清理和最大会话限制。看 docs/grpc-sandbox-architecture.md 了解详情。
______________________________________________________________________
目录
- 添加到克劳德代码 - 环境变量 - 开发设置 - HTTP传输
- prodisco.search工具 - prodisco.run沙盒
- 集装箱隔离 - 传输安全(TLS/mTLS)
______________________________________________________________________
为什么是渐进式披露?
Anthropic的最新指南解释了为什么MCP服务器应该逐步显示功能,而不是将每个工具定义都转储到模型上下文中。当代理探索TypeScript模块的文件系统时,它们只加载所需的内容,并在执行环境中处理数据,然后向聊天返回简洁的结果。这使令牌使用率保持较低水平,改善了延迟,并避免了通过模型复制大型中间有效载荷(来源).
ProDisco更进一步:它提供了一个结构化的参数搜索工具,使用TypeScript AST解析从上游库中动态提取方法,而不是公开自定义TypeScript模块。这意味着:
- 零维护 -方法直接从库中提取
.d.ts文件 - 始终为最新 -升级依赖关系会自动暴露新方法
- 类型安全 -包括完整的参数类型和返回类型
______________________________________________________________________
快速开始
添加到克劳德代码
Kubernetes+可观察性:
curl -O https://raw.githubusercontent.com/harche/ProDisco/main/examples/prodisco.kubernetes.yaml
claude mcp add ProDisco --env KUBECONFIG="${HOME}/.kube/config" -- npx -y @prodisco/mcp-server --config prodisco.kubernetes.yamlPostgreSQL(内存测试):
curl -O https://raw.githubusercontent.com/harche/ProDisco/main/examples/prodisco.postgres.yaml
claude mcp add ProDisco -- npx -y @prodisco/mcp-server --config prodisco.postgres.yaml如果需要,请删除:
claude mcp remove ProDisco环境变量
| 变量 | 必填 | 描述 |
|---|---|---|
PRODISCO_CONFIG_PATH | 否 | 库配置文件的路径(与 --config) |
KUBECONFIG | 否 | (如果使用 @kubernetes/client-node)kubeconfig的路径(默认为 ~/.kube/config) |
PROMETHEUS_URL | 否 | (如果使用 @prodisco/prometheus-client)Prometheus服务器URL |
LOKI_URL | 否 | (如果使用 @prodisco/loki-client)洛基服务器URL |
重要提示: 运行前导出环境变量claude mcp addThe--env标志可能无法可靠地将变量传递给MCP服务器进程。
提示: 如果您正在使用kind集群进行本地测试,则可以将其移植到Prometheus: ``bash kubectl port-forward -n monitoring svc/prometheus-server 9090:80`然后设置PROMETHEUS_URL="http://localhost:9090"`
开发设置
对于当地发展:
git clone https://github.com/harche/ProDisco.git
cd ProDisco
npm install
npm run build
claude mcp add --transport stdio prodisco -- node dist/server.js
claude mcp remove prodisco # remove when you're done启动选项:
| 标志 | 描述 |
|---|---|
--clear-cache | 启动前清除脚本缓存 |
| `--config | |
| ` | 要索引/允许的YAML/JSON配置列表库的路径 |
--transport | 运输方式: stdio (默认)或 http |
--host | 要绑定的HTTP主机(默认值: 127.0.0.1) |
| `--port | |
| ` | HTTP端口(默认值: 3000,暗示 --transport http) |
node dist/server.js --clear-cache动态库配置
ProDisco可以通过一个配置文件启动,该文件确定哪些npm包是:
- 已编入索引 通过
prodisco.searchTools - 允许 在沙盒中通过
require()(与索引保持同步)
看 examples/ 用于即用型配置(Kubernetes、PostgreSQL等)。
示例 prodisco.config.yaml:
libraries:
- name: "@kubernetes/client-node"
description: "Kubernetes API client"
- name: "@prodisco/prometheus-client"
description: "Prometheus queries + metric discovery"
- name: "@prodisco/loki-client"
description: "Loki LogQL querying"
- name: "simple-statistics"
description: "Statistics helpers"从配置文件开始:
node dist/server.js --config prodisco.config.yaml缺少的软件包会自动安装到 .cache/deps 在启动时。
环境变量:
| 变量 | 描述 |
|---|---|
PRODISCO_CONFIG_PATH | YAML/JSON配置列表库的路径 |
从配置构建Docker镜像
如果你想要已经包含配置库的映像(用于单独部署MCP和沙盒),你可以直接从同一个配置文件构建它们:
npm run docker:build:config -- --config prodisco.config.yaml这将构建:
prodisco/mcp-server:使用根Dockerfileprodisco/sandbox-server:使用packages/sandbox-server/Dockerfile
您可以覆盖图像名称/标签:
npm run docker:build:config -- --config prodisco.config.yaml --tag dev --mcp-image myorg/prodisco-mcp --sandbox-image myorg/prodisco-sandboxHTTP传输
ProDisco支持基于网络的MCP连接的HTTP传输,支持远程访问和容器化部署。
以HTTP模式启动:
# HTTP mode on default port (3000)
node dist/server.js --transport http
# HTTP mode on custom port
node dist/server.js --port 8080
# HTTP mode on all interfaces (for network access)
node dist/server.js --host 0.0.0.0 --port 3000环境变量:
| 变量 | 默认值 | 描述 |
|---|---|---|
MCP_TRANSPORT | stdio | 运输方式(stdio 或 http) |
MCP_HOST | 127.0.0.1 | 要绑定的HTTP主机 |
MCP_PORT | 3000 | 要侦听的HTTP端口 |
HTTP端点:
| 端点 | 方法 | 描述 |
|---|---|---|
/health | GET | 健康检查,返回 {"status":"ok"} |
/mcp | POST | MCP JSON-RPC端点(可流式HTTP) |
示例:使用curl连接
# Health check
curl http://localhost:3000/health
# Initialize MCP session
curl -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0.0"}}}'
# Use session ID from response header for subsequent requests
curl -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-H "mcp-session-id: " \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}'HTTP传输使用MCP SDK StreamableHTTPServerTransport,通过以下方式支持会话管理 mcp-session-id 用于流式响应的标头和服务器发送事件(SSE)。
______________________________________________________________________
可用工具
ProDisco公开了两个工具:
prodisco.search工具
搜索和浏览提取的API文档 启动配置的TypeScript库 (从 .d.ts).使用它来发现正确的方法/类型/函数签名 之前 召唤 prodisco.runSandbox.
文档类型:
| 类型 | 描述 |
|---|---|
method | 从配置的库中提取的类方法/实例API |
type | TypeScript类型(接口/类/枚举/类型别名) |
function | 独立导出功能 |
script | 缓存的沙盒脚本 |
all | 搜索上面的所有内容(默认) |
示例:
// Search broadly by name (methods/types/functions/scripts)
// Replace the placeholders with terms relevant to your configured libraries.
{ methodName: "" }
// Filter by document type (methods/types/functions/scripts)
{ methodName: "", documentType: "method" }
// Find Loki query methods
{ documentType: "method", library: "@prodisco/loki-client", category: "query" }
// Find Prometheus methods
{ methodName: "executeRange", library: "@prodisco/prometheus-client" }
// Find analytics functions
{ documentType: "function", library: "simple-statistics" }
// Search cached scripts
{ documentType: "script", methodName: "deployment" }
// Get TypeScript type definitions (classes/interfaces/enums/type aliases)
{ methodName: "", documentType: "type" }
// Exclude certain categories/libraries
{ methodName: "query", exclude: { categories: ["delete"], libraries: ["some-library"] } }有关综合文档,请参阅 docs/search-tools.md.
prodisco.run沙盒
在沙盒环境中使用相同的方法执行TypeScript代码 配置库列表 作为 prodisco.searchTools.
执行模式:
| 模式 | 目的 | 关键参数 |
|---|---|---|
execute (默认) | 阻止执行 | code 或 cached, timeout |
stream | 实时输出流 | code 或 cached, timeout |
async | 后台执行 | code 或 cached, timeout |
status | 检查异步执行 | executionId, wait, outputOffset |
cancel | 取消运行执行 | executionId |
list | 列出正在执行的操作 | states, limit |
沙盒环境:
console-捕获的输出(日志、错误、警告、信息)require()-仅限于已配置的npm包(及其子路径)process.env-环境变量
示例:
// Execute code (default mode)
{
code: `
const k8s = require("@kubernetes/client-node");
const kc = new k8s.KubeConfig();
kc.loadFromDefault();
const api = kc.makeApiClient(k8s.CoreV1Api);
const pods = await api.listNamespacedPod("default");
console.log(\`Found \${pods.body.items.length} pods\`);
`
}
// Run a cached script
{ cached: "script-2025-01-01T12-00-00-abc123.ts" }
// Stream mode - real-time output
{ mode: "stream", code: "for(let i=0; i m.name));
// Execute PromQL query
const end = new Date();
const start = new Date(end.getTime() - 60 * 60 * 1000);
const result = await client.executeRange('node_memory_MemAvailable_bytes', { start, end, step: '1m' });
console.log(\`Got \${result.data.length} time series\`);
`
}
// Query Loki logs
{
code: `
const { LokiClient } = require('@prodisco/loki-client');
const client = new LokiClient({ baseUrl: process.env.LOKI_URL });
const result = await client.queryRange('{namespace="default"}', { since: '1h', limit: 100 });
result.logs.forEach(log => console.log(\`[\${log.timestamp.toISOString()}] \${log.line}\`));
`
}有关架构的详细信息,请参阅 docs/grpc-sandbox-architecture.md.
______________________________________________________________________
高级分析
ProDisco超越了简单的资源获取,它提供 统计分析、机器学习和信号处理 深度集群可观测性的能力。
可用库:
| 图书馆 | 目的 |
|---|---|
simple-statistics | 平均值、中位数、标准偏差、z评分、百分位数、线性回归、相关性 |
ml-regression | 趋势预测的多项式、指数和幂回归 |
mathjs | 矩阵运算、线性代数、符号数学 |
fft-js | 用于检测周期性模式的快速傅里叶变换 |
示例提示:
| 用例 | 提示 |
|---|---|
| 日志分析 | “查询Loki上一小时nginx应用程序的错误日志。显示最常见的错误模式。” |
| 群集运行状况 | 分析所有Pod的CPU和内存使用情况。计算平均值、中位数、标准偏差,并使用z分数识别异常值。显示高于第95百分位的Pod |
| 内存渗漏体 | “检查内存泄漏。获取超过2小时的内存使用情况,并使用线性回归来识别内存增加的Pod。” |
| 异常检测 | “分析网络流量并检测异常。查找与正常值相差2个标准差以上的接收/传输速率。” |
| 相关性 | “查找CPU和内存使用率之间的相关性。告诉我高CPU是否与高内存相关。” |
| 周期性模式 | “在节点CPU上使用FFT分析来检测周期性模式。是否有表明计划作业的主频率?” |
| 容量规划 | “分析资源趋势,并使用多项式回归来预测何时可能达到资源极限。” |
有关代码和输出的详细示例,请参阅 docs/analytics.md.
______________________________________________________________________
高级部署
集装箱隔离
为了加强隔离,请在Kubernetes集群中运行沙盒服务器并通过TCP连接。
1.部署沙盒服务器:
# Build and load the image (for kind clusters)
docker build -f packages/sandbox-server/Dockerfile -t prodisco/sandbox-server:latest .
kind load docker-image prodisco/sandbox-server:latest
# Deploy
kubectl apply -f packages/sandbox-server/k8s/deployment.yaml
# Port-forward to access locally
kubectl -n prodisco port-forward service/sandbox-server 50051:500512.配置MCP服务器使用TCP:
export KUBECONFIG="${HOME}/.kube/config"
export SANDBOX_USE_TCP=true
export SANDBOX_TCP_HOST=localhost
export SANDBOX_TCP_PORT=50051
claude mcp add --transport stdio prodisco -- node dist/server.js --config examples/prodisco.kubernetes.yaml运输环境变量:
| 变量 | 默认值 | 描述 |
|---|---|---|
SANDBOX_USE_TCP | false | 使用TCP而不是本地子进程 |
SANDBOX_TCP_HOST | localhost | 沙盒服务器主机 |
SANDBOX_TCP_PORT | 50051 | 沙盒服务器端口 |
传输安全(TLS/mTLS)
对于生产部署,沙盒服务器支持TLS和双向TLS(mTLS):
| 模式 | 描述 |
|---|---|
insecure | 无加密(默认,用于本地开发) |
tls | 服务器端TLS(客户端验证服务器身份) |
mtls | 双向TLS(客户端和服务器都进行身份验证) |
配置:
# Server-side TLS
export SANDBOX_TRANSPORT_MODE=tls
export SANDBOX_TLS_CERT_PATH=/path/to/server.crt
export SANDBOX_TLS_KEY_PATH=/path/to/server.key
# Client-side (MCP server)
export SANDBOX_TRANSPORT_MODE=tls
export SANDBOX_TLS_CA_PATH=/path/to/ca.crt对于Kubernetes部署,使用证书管理器自动化证书管理。看 k8s/证书管理器 即用清单目录。
有关完整的体系结构和安全详细信息,请参阅 docs/grpc-sandbox-architecture.md.
______________________________________________________________________
测试
集成测试
使用KIND集群+Cloud-Agent SDK进行端到端测试:
npm run test:integration有关详细的测试说明,请参阅 docs/集成测试.md.
______________________________________________________________________
其他文件
| 文档 | 描述 |
|---|---|
| docs/analytics.md | 高级分析指南 -异常检测、预测、相关性、FFT分析 |
| docs/search-tools.md | 完整的searchTools参考,包括示例和技术架构 |
| 示例/README.md | 实例+可运行的库配置文件(examples/*.yaml) |
| docs/grpc-sandbox-architecture.md | 沙盒架构、gRPC协议和安全配置 |
| docs/集成测试.md | 集成测试工作流程和容器测试 |
______________________________________________________________________
许可证
麻省理工学院
