返回市场
MCP-域名系统逻辑卷

MCP-域名系统逻辑卷

作者:Orange-County-AI3 星标更新:2025-11-10

项目介绍

MCP-DSL:一种高效的模型上下文协议语言

减少75-85%的令牌使用。相同的MCP功能。真正的成本节约。

MCP-DSL是一种领域特定语言,旨在替代模型上下文协议中的冗长JSON-RPC,最多可减少85%的令牌使用量,同时保持完全兼容性和表达力。

快速示例

传统JSON-RPC:

{
  "jsonrpc": "2.0",
  "id": 42,
  "method": "tools/call",
  "params": {
    "name": "search",
    "arguments": {
      "query": "weather"
    }
  }
}

MCP-DSL:

> tools/call#42 {name: "search", args: {query: "weather"}}

结果:176个令牌 → 42个令牌(76%的减少)


安装

作为库安装:

npm install mcp-dsl
# 或
bun install mcp-dsl

全局安装以供CLI使用:

npm install -g mcp-dsl
# 或
bun install -g mcp-dsl

使用

作为库

import { compileDsl, decompile } from 'mcp-dsl';

// 将DSL编译为JSON-RPC
const result = compileDsl('> initialize#1 {v: "2025-06-18"}');
console.log(result.messages[0]);
// {
//   jsonrpc: "2.0",
//   id: 1,
//   method: "initialize",
//   params: { protocolVersion: "2025-06-18" }
// }

// 将JSON-RPC反编译回DSL
const dsl = decompile(result.messages);
console.log(dsl);
// > initialize#1 {v: "2025-06-18"}

CLI工具

# 将DSL编译为JSON
echo '> initialize#1 {v: "2025-06-18"}' | mcp-dsl compile --pretty

# 将JSON反编译为DSL
cat message.json | mcp-dsl decompile

# 验证DSL
mcp-dsl lint input.mcp

# 格式化DSL
mcp-dsl format input.mcp -o output.mcp

CLI命令

  • compile - 将DSL转换为JSON-RPC

    • --pretty - 美化JSON输出
    • --messages - 只输出消息
    • --tools - 只输出工具定义
    • --resources - 只输出资源定义
    • --no-validate - 跳过语义验证
  • decompile - 将JSON-RPC转换为DSL

    • --messages/--tools/--resources - 反编译特定类型
  • lint - 验证DSL语法和语义

  • format - 解析并美化DSL

所有命令都支持 -i/--input(文件或 - 表示标准输入)和 -o/--output(文件或 - 表示标准输出)。

语言特性

消息类型

  • > 请求(带有方法#ID)
  • < 响应(带有#ID)
  • ! 通知(不期望响应)
  • x 错误(带有代码:消息)

定义类型

  • T 工具(具有模式的可执行函数)
  • R 资源(具有URI的数据源)
  • P 提示(具有参数的模板)
  • RT 资源模板(参数化的URI模式)

类型系统

紧凑的类型表示法与推断:

T analyze_code {
  desc: "分析代码问题"
  in: {
    code: str!           # 必需字符串
    language: str!
    rules?: {            # 可选嵌套对象
      complexity?: int = 10
      lineLength?: int = 100
    }
  }
  out: {
    issues: [{          # 对象数组
      line: int
      severity: enum[error, warning, info]
      message: str
    }]
  }
}

字段名缩写

DSLJSON-RPC
vprotocolVersion
capscapabilities
infoclientInfo / serverInfo
argsarguments
descdescription
mimemimeType
ininputSchema
outoutputSchema

参见 GRAMMAR.md 获取完整的语言规范。

为什么选择MCP-DSL?

令牌效率

对于每天处理1百万MCP消息的系统:

  • 节省的令牌:341M令牌/天
  • API成本节约(按每3M输入令牌$3计算):$1,023/天 = $373,395/年
  • 包括输出令牌(按每15M$计算):总节约**$1.2M+/年**

即使在中等规模下(每天10万消息),年度节约也超过**$120K**。

在何时使用MCP-DSL

当以下情况时,MCP-DSL提供最大价值:

  • 高消息量:每天处理数千请求的服务器
  • 上下文受限模型:窗口有限的小模型
  • 成本敏感的应用程序:大规模生产系统
  • 实时系统:较低的令牌计数意味着更快的处理速度
  • 多轮对话:多次交换中的节省累积

开发

设置

此项目使用mise进行工具版本管理:

# 安装mise(如果尚未安装)
curl https://mise.run | sh

# 安装项目依赖
mise install
bun install

运行测试

mise run test              # 运行所有测试
mise run test-watch        # 监控模式
bun test                   # 直接通过bun运行

开发任务

mise run check            # 运行所有检查(测试+CLI验证)
mise run build            # 验证CLI工具是否工作
mise run lint             # 检查示例文件(如果有)
mise run format           # 格式化示例文件(如果有)

项目结构

src/
├── ast/              # 抽象语法树定义
├── lexer/            # 词法分析
├── parser/           # 递归下降解析器
├── compiler/         # DSL → JSON-RPC转换
├── decompiler/       # JSON-RPC → DSL转换
├── semantic/         # 语义验证
├── types/            # 公共类型定义
├── utils/            # 实用工具(映射、字符串处理)
├── cli.ts            # CLI工具
└── index.ts          # 公开API

语法

参见 GRAMMAR.md 获取完整的EBNF语法规范。

贡献

欢迎贡献!请查看问题跟踪器了解当前任务和计划的功能。

许可证

MIT许可证 - 详情请参阅LICENSE

为什么这很重要

模型上下文协议正成为LLM工具交互的标准。随着MCP的采用增加,协议效率直接影响:

  • 大规模的成本:处理数百万消息的生产系统
  • 模型能力:更多的令牌可用于实际内容
  • 开发者体验:可读且易于维护的协议定义
  • 生态系统增长:降低构建MCP服务器/客户端的门槛

MCP-DSL使协议更加易用和成本效益,而不牺牲功能或兼容性。