内容
# 任意MCP
**将任意文件夹转换为MCP服务。**
将文件放入 `resources/`,脚本放入 `tools/`,任意MCP将它们暴露给任何支持MCP的代理,并为您处理身份验证、模式生成和可观察性。
自托管。多服务。任意语言。
[](LICENSE)

---
## 它做什么
- **约定优于配置。** 将文件和脚本放入目录。任意MCP发现它们,检测MIME类型,并通过LLM自动生成JSON模式 - 无需手动编写定义。
- **多服务隔离。** 在一个实例上托管多个服务,每个服务都有自己的身份验证令牌、资源和工具。
- **任意运行时。** 用Python、Node.js、Bash、TypeScript、Ruby或编译二进制编写工具。如果它读取标准输入并写入标准输出,它就起作用。
- **内置安全性。** 按服务划分的Bearer令牌 - 创建、轮换、吊销。在静止状态下使用SHA-256哈希。
- **内置可观察性。** 实时活动日志、按服务划分的健康指标、用于审计跟踪的CSV导出。
- **网页仪表盘。** 创建服务、管理令牌、切换资源和工具,在内置的游乐场中测试所有功能。
---
## 快速开始
```bash
git clone https://github.com/palarix/any-mcp.git
cd any-mcp
bun install
bun run dev
```
任意MCP找到一个可用的端口,在您的浏览器中打开,您可以在一分钟内管理服务。
### 创建服务
```bash
mkdir my-service && cd my-service
# 添加资源
mkdir resources
echo '{"primary": "#5e6ad2", "text": "#e4e4e7"}' > resources/colors.json
# 添加工具
mkdir tools
cat > tools/greet.py << 'EOF'
#!/usr/bin/env python3
import sys, json
args = json.loads(sys.stdin.read())
print(f"Hello, {args.get('name', 'World')}!")
EOF
chmod +x tools/greet.py
```
就是这样。任意MCP会识别它,生成模式,并通过MCP提供服务。
---
## 安装
### 从源代码(推荐)
```bash
git clone https://github.com/palarix/any-mcp.git
cd any-mcp
bun install
# 开发模式(热重载)
bun run dev
# 生产构建
bun run build
bun run start
```
### Docker
```bash
docker build -t any-mcp .
docker run --rm -p 4000:3000 -v ./services:/app/services any-mcp
```
---
## 命令行界面
```
any-mcp [command] [options]
```
| 命令 | 描述 |
|---|---|
| `start`(默认) | 启动任意MCP服务器 |
| `init` | 在当前目录中搭建`.any-mcp/` |
| `add-service <name>` | 创建新的服务目录 |
| `services` | 列出已注册的服务 |
| 选项 | 描述 |
|---|---|
| `--port <n>` | 覆盖端口(默认:从4000自动) |
| `--dir <path>` | 目标目录(默认:`.`) |
| `--server` | 无头模式 - 无浏览器 |
| `--global` | 强制全局模式(`~/.config/any-mcp/`) |
| `--quiet` | 禁止非错误输出 |
| `--verbose` | 详细日志 |
---
## 服务工作原理
服务是一个带有`mcp-service.json`描述符的目录:
```
my-service/
├── mcp-service.json
├── resources/
│ ├── brand-guide.md
│ ├── colors.json
│ └── logo.svg
└── tools/
├── check-contrast.py
└── generate-palette.js
```
```json
{
"name": "my-service",
"displayName": "我的服务",
"description": "代理的设计系统上下文",
"enabled": true,
"resources": {
"enabled": true,
"paths": ["./resources"]
},
"tools": {
"enabled": true,
"paths": ["./tools"]
},
"auth": {
"enabled": true,
"type": "bearer"
}
}
```
### 资源
`resources/`目录中的任何文件都成为MCP资源。任意MCP检测MIME类型并提供内容。代理读取资源以获取上下文 - 设计令牌、文档、配置文件、数据。
### 工具
`tools/`目录中的脚本成为MCP工具。合同很简单:
| 方向 | 通道 | 格式 |
|---|---|---|
| **输入** | 标准输入 | JSON对象 |
| **输出** | 标准输出 | 任意文本(返回给代理) |
| **日志** | 标准错误 | 已捕获,不返回 |
| **状态** | 退出代码 | 0 = 成功,非零 = 错误 |
用适合工作的语言编写工具:
**Python**
```python
#!/usr/bin/env python3
import sys, json
args = json.loads(sys.stdin.read())
name = args.get("name", "World")
print(f"Hello, {name}!")
```
**JavaScript**
```javascript
#!/usr/bin/env node
const fs = require("fs");
const args = JSON.parse(fs.readFileSync(0, "utf-8"));
console.log(`Hello, ${args.name || "World"}!`);
```
**Bash**
```bash
#!/bin/bash
input=$(cat)
name=$(echo "$input" | jq -r '.name // "World"')
echo "Hello, $name!"
```
编译后的二进制文件也起作用 - 任何可执行文件都可以读取标准输入并写入标准输出。
### 模式生成
任意MCP使用LLM为工具自动生成输入模式。您也可以在`mcp-service.json`中定义模式或通过仪表盘编辑它们。
---
## 连接代理
任意MCP通过[MCP Streamable HTTP传输](https://modelcontextprotocol.io/specification/2025-03-26/basic/transports#streamable-http)在`/mcp/<service-name>`提供每个服务。
### Claude 代码
```json
{
"mcpServers": {
"my-service": {
"type": "url",
"url": "http://localhost:4000/mcp/my-service",
"headers": {
"Authorization": "Bearer <TOKEN>"
}
}
}
}
```
### Cursor / VS Code
```json
{
"mcp": {
"servers": {
"my-service": {
"type": "url",
"url": "http://localhost:4000/mcp/my-service",
"headers": {
"Authorization": "Bearer <TOKEN>"
}
}
}
}
}
```
从仪表盘的每个服务的身份验证设置中生成令牌。
---
## 数据存储
任意MCP使用本地优先策略:
| 模式 | 配置 | 服务 | 何时 |
|---|---|---|---|
| **本地** | `./.any-mcp/config.json` | 当前目录 | 在`any-mcp init`之后 |
| **全局** | `~/.config/any-mcp/config.json` | `~/.config/any-mcp/services/` | 默认回退 |
使用 `--global` 强制全局模式,当存在本地配置时。
---
## 用例
**品牌设计系统** - 将设计令牌、排版规则和组件指南作为资源提供。添加一个对比度检查工具。您的编码代理在不产生颜色幻觉的情况下生成品牌UI。
**DevOps 运行手册** - 将监控脚本作为工具公开,将配置文件作为资源。运维代理可以检查服务状态、查询指标并遵循您的运行手册 - 具有身份验证范围,以确定其可访问范围。
**知识库** - 将markdown文档、API规范或数据文件放入资源中。具有访问权限的任何代理都将获得可靠的上下文,而不是进行猜测。
**内部API** - 将内部端点包装为工具脚本。代理通过MCP调用它们,并具有适当的身份验证,无需直接网络访问。
---
## 配置
配置优先级:CLI标志 > 环境变量 > 配置文件 > 默认值。
```json
{
"server": {
"port": 4000,
"host": "localhost"
},
"llm": {
"provider": "openai",
"apiKey": "sk-...",
"model": "gpt-4",
"baseUrl": "https://api.openai.com/v1"
},
"security": {
"tokenExpiry": "never",
"allowedOrigins": ["*"]
},
"logging": {
"level": "info",
"retentionDays": 30
}
}
```
LLM设置支持自动生成工具模式。任何与OpenAI兼容的端点都起作用。
参见 `.env.example` 获取环境变量选项。
---
## 健康检查
```bash
curl http://localhost:4000/api/health
```
```json
{
"status": "healthy",
"uptime": 123.45,
"services": { "total": 5, "active": 4 },
"timestamp": "2026-01-22T12:34:56.789Z"
}
```
---
## 贡献
```bash
git clone https://github.com/palarix/any-mcp.git
cd any-mcp
bun install
bun run dev
```
开发服务器在 `http://localhost:4000` 运行,并带有 `examples/` 中的示例服务。
### 问题跟踪
该项目使用 [Exponential (xpo)](https://github.com/palarix/exponential) 进行问题跟踪。问题存放在 `.xpo/` 中,与代码一起。
```bash
xpo list # 查看所有问题
xpo add "title" # 创建问题
xpo board # 打开网页板
```
---
## 许可证
[MIT](LICENSE)