返回市场
超越-MCP

超越-MCP

作者:disler86 星标更新:2025-11-10

项目介绍

超越MCP

是时候超越MCP服务器了...对吗?

让我们来分析一下在构建可重用工具集时,MCP、CLI、文件系统脚本以及基于技能的方法之间的实际工程权衡。

点击观看完整视频解析:超越MCP

本仓库的目的

  • MCP服务器是构建AI代理可重用工具集的标准方式。但它们不是唯一的方式。
  • MCP服务器伴随着巨大的成本——即时上下文丢失
  • 当你只有一个或几个MCP服务器时,这并不是什么大问题。但是当你扩展到多个代理、多种工具和多种上下文时,这种成本很快就会成为瓶颈。
  • 那么,大型玩家使用哪些替代方案来构建强大、可重用且保留上下文的工具集呢?

在这里,我们将探索本仓库中的四种具体方法,所有这些方法都实现了访问Kalshi预测市场数据的功能。

四种方法

四种方法揭示

apps/1_mcp_server/ - MCP服务器

MCP服务器架构

apps/2_cli/ - CLI

CLI架构

apps/3_file_system_scripts/ - 文件系统脚本

文件系统脚本架构

apps/4_skill/ - 技能

代理技能架构

快速开始

1. MCP服务器

cp .mcp.testing .mcp.json

claude --mcp-config .mcp.json

prompt: "kalshi: 获取交易所状态"

2. CLI

# 或通过代理
claude

prompt: "/prime_kalshi_cli_tools"

prompt: "kalshi: 获取交易所状态"

prompt: "kalshi: 列出事件"

prompt: "kalshi: 以JSON格式列出事件"

prompt: "kalshi: 以JSON格式列出事件,限制100条"

# 或手动操作
cd apps/2_cli
uv sync
uv run kalshi status
uv run kalshi events
uv run kalshi events --json
uv run kalshi events --json --limit 100

3. 文件系统脚本

# 通过代理
claude

prompt: "/prime_file_system_scripts"

prompt: "kalshi: 获取交易所状态"

prompt: "kalshi: 列出事件"

...

# 或手动操作
cd apps/3_file_system_scripts/scripts

uv run status.py

uv run *.py

4. 技能

cd apps/4_skill/

claude

prompt: "kalshi markets: 获取交易所状态"

prompt: "kalshi markets: 搜索关于'最佳AI'的事件" # 注意,首次运行会触发缓存构建,可能需要几分钟时间

...

四种方法详解

  • apps/1_mcp_server/ - MCP服务器
  • apps/2_cli/ - CLI
  • apps/3_file_system_scripts/ - 文件系统脚本
  • apps/4_skill/ - 技能

1. MCP服务器 (apps/1_mcp_server/)

经典模型上下文协议实现

  • 标准化集成 - 可与任何兼容MCP的客户端工作
  • 工具发现 - 自动暴露15个工具给LLMs
  • 清晰抽象 - MCP协议处理复杂性
  • 即时上下文丢失 - 每次工具调用都会丢失对话上下文
  • 包装器开销 - 通过子进程委托给CLI

架构:

Claude/LLM → MCP协议 → MCP服务器 → 子进程 → CLI → Kalshi API

关键文件:

  • server.py - 包含15个工具定义的FastMCP服务器
  • 将CLI命令包装成MCP工具接口
  • 每次工具调用都是无状态的

何时使用: 构建适用于多个LLM客户端的工具,需要标准化协议,可以接受上下文丢失。


2. CLI (apps/2_cli/)

通过命令行界面直接访问HTTP API

  • 单一事实来源 - 直接API调用,无需包装器
  • 双输出模式 - 人类可读或纯JSON
  • 智能缓存 - 基于Pandas的搜索,6小时过期时间
  • 最小开销 - 直接httpx调用,无需SDK
  • 改进上下文 - 代理读取的上下文比MCP服务器少约一半

架构:

Claude → 子进程 → CLI(13个命令)→ 直接HTTP → Kalshi API

关键文件:

  • kalshi_cli/cli.py - 所有13个命令(552行)
  • kalshi_cli/modules/client.py - HTTP客户端及搜索缓存
  • kalshi_cli/modules/formatting.py - 输出格式化程序

何时使用: 需要直接控制API,希望同时拥有CLI和编程访问,缓存重要,可以接受子进程开销。


3. 文件系统脚本 (apps/3_file_system_scripts/)

通过独立脚本逐步披露

  • 逐步披露 - 只加载你需要的脚本(每个约200-300行)
  • 完全隔离 - 每个脚本都是完全自包含的
  • 零依赖 - 每个脚本中嵌入HTTP客户端
  • 上下文高效 - 代理只读取相关脚本
  • ⚠️ 代码重复 - 每个脚本中重复HTTP客户端
  • ⚠️ 无共享状态 - 缓存和实用工具重复

架构:

Claude → 读取工具 → 单独脚本 → 嵌入式HTTP客户端 → Kalshi API

可用脚本(10个):

  • status.py - 交易所运营状态
  • markets.py - 浏览市场(带过滤器)
  • market.py - 详细市场信息
  • orderbook.py - 买入/卖出深度
  • trades.py - 最近交易活动
  • search.py - 关键词搜索(带缓存)
  • events.py - 列出事件集合
  • event.py - 事件详情
  • series_list.py - 浏览所有约6900个系列
  • series.py - 系列信息

何时使用: 上下文保存至关重要,希望逐步披露,可以接受代码重复,需要独立便携性。


4. 技能 (apps/4_skill/.claude/skills/kalshi-markets/)

Claude代码代理技能,嵌入脚本

  • 模型调用 - Claude自主决定何时使用
  • 逐步披露 - 同方法#3的脚本
  • 团队共享 - 提交到git供团队访问
  • 发现 - 描述触发自动激活
  • 上下文保存 - 代理只读取所需内容
  • ⚠️ Claude代码特定 - 仅在Claude代码中工作
  • ⚠️ 学习曲线 - 需要理解技能系统

架构:

Claude(检测触发)→ 加载SKILL.md → 运行脚本 → Kalshi API

结构:

.claude/skills/kalshi-markets/
├── SKILL.md(简洁描述及说明)
└── scripts/(所有10个文件系统脚本的副本)

何时使用: 使用Claude代码,希望自动技能发现,通过git进行团队协作,需要上下文保存和逐步披露。


我的方法(@indydevdan

外部工具

  1. 80% 直接使用MCP服务器。不要过度思考。
  2. 15% CLI - 如果你需要修改、扩展或控制工具和上下文。
  3. 5% 脚本或技能 - 对于严重的上下文保存、便携性或生态系统复用。

新工具

  1. 80% 直接使用CLI + 主题提示(适用于你、你的团队和你的代理)。
  2. 10% 当我需要在规模上使用多个代理时,将其封装在MCP服务器中 - 并不想再增加“另一个”让我的代理关注的东西。
  3. 10% 脚本或技能 - 对于严重的上下文保存、便携性或生态系统复用。

关键技术细节

API访问:

  • 基础URL:https://api.elections.kalshi.com/trade-api/v2
  • 不需要身份验证(只读公共数据)
  • 约6900个市场系列可用

搜索缓存:

Kalshi API没有提供原生搜索端点,这使得按关键词查找市场成为一个挑战。我们的解决方案:智能本地缓存。

  • 问题: 没有API搜索端点意味着我们需要在每次搜索时分页浏览数千个市场
  • 解决方案: 一次性构建完整的本地缓存,然后使用pandas进行即时搜索
  • 首次运行: 2-5分钟内获取所有约6900个市场并建立缓存
  • 后续搜索: 即时(搜索缓存的pandas DataFrame)
  • 缓存位置: 项目根目录下的.kalshi_cache/(CLI和脚本共享)
  • 过期时间: 6小时(过期时自动刷新)
  • 搜索范围: 搜索标题、副标题、代号、系列名称和描述

延迟为什么重要:

  • 会话中的第一次搜索将花费2-5分钟来构建缓存
  • 用户会在缓存构建期间看到进度消息
  • 初始构建后,搜索在接下来的6小时内是即时的
  • 这种权衡使全面关键词搜索成为可能,覆盖所有市场,而不仅仅是分页API调用返回的前100-500个结果

路径解析:

  • 所有脚本通过Path(__file__).resolve()使用绝对路径解析
  • 从任何目录调用时都能正确工作
  • 缓存始终解析到项目根目录

权衡比较

MCPCLI脚本技能
代理调用
上下文窗口消耗中等(取决于情况)低(随增量)低(随增量)
可定制否(除非你拥有)
便携性中等
组合性是(MCP提示)是但需要本地提示是但需要本地提示是但需要本地提示
简易性中等中等中等
工程投入如果外部则低,如果自定义则中等中等中等如果外部则低,如果自定义则中等
功能集工具、资源、提示、引诱、完成、采样、日志记录、认证等你可以构建的任何东西你可以构建的任何东西你可以构建的任何东西

关键见解

上下文窗口消耗:

  • MCP & CLI 在每次工具调用时消耗完整上下文
  • 脚本 & 技能 使用逐步披露 - 只加载所需内容

代理调用:

  • MCP & 技能 根据上下文由Claude自动触发
  • CLI & 脚本 需要明确的代理决策来使用

可定制:

  • MCP 除非你拥有或分叉服务器,否则锁定
  • CLI、脚本、技能 完全在你的控制之下

便携性:

  • 脚本 & 技能 最具便携性(只需Python文件)
  • CLI 需要安装但可以在任何地方工作
  • MCP 需要设置兼容MCP的客户端

何时使用每种方法

如果选择MCP服务器:

  • 为多个LLM客户端(不仅仅是Claude)构建
  • 需要标准化工具协议
  • 可以接受每次调用的上下文丢失
  • 需要在客户端之间自动发现工具
  • 使用你无法控制的外部MCP服务器

如果选择CLI:

  • 需要同时具有人类CLI和编程访问
  • 希望API逻辑有一个单一的事实来源
  • 直接控制HTTP很重要
  • 愿意接受子进程开销
  • 构建通用工具

如果选择文件系统脚本:

  • 上下文保存至关重要
  • 希望最大便携性(只需Python + httpx)
  • 需要逐步披露(最小化令牌使用)
  • 可以接受为了隔离而进行的代码重复
  • 构建一次性集成

如果选择技能:

  • 特别使用Claude代码(及其生态系统)
  • 希望自主技能发现
  • 通过git进行团队协作很重要
  • 需要上下文保存+逐步披露
  • 构建可重用的团队能力

项目结构

beyond-mcp/
├── apps/
│   ├── 1_mcp_server/          # MCP服务器实现
│   │   ├── server.py           # 包装CLI的15个MCP工具
│   │   └── README.md
│   ├── 2_cli/                  # CLI实现
│   │   ├── kalshi_cli/
│   │   │   ├── cli.py          # 13个命令(552行)
│   │   │   └── modules/        # HTTP客户端、缓存、格式化程序
│   │   └── README.md
│   ├── 3_file_system_scripts/  # 逐步披露脚本
│   │   ├── scripts/            # 10个独立脚本
│   │   │   ├── status.py
│   │   │   ├── markets.py
│   │   │   ├── market.py
│   │   │   ├── orderbook.py
│   │   │   ├── trades.py
│   │   │   ├── search.py
│   │   │   ├── events.py
│   │   │   ├── event.py
│   │   │   ├── series_list.py
│   │   │   └── series.py
│   │   └── README.md
│   └── 4_skill/                # Claude代码技能
│       └── .claude/skills/kalshi-markets/
│           ├── SKILL.md        # 技能描述及说明
│           └── scripts/        # 与#3相同的10个脚本
└── .kalshi_cache/              # 共享缓存目录(CLI和脚本)

资源

掌握代理编码

准备迎接软件工程的未来

通过Tactical Agentic Coding学习战术代理编码模式。

关注IndyDevDan YouTube频道,提升你的代理编码优势。