mcpField
B
Backlot

Backlot

本地服务
github.com开发工具262今天更新

关于 Backlot

Backlot 是面向集成开发与测试的企业 SaaS API 本地模拟器。它从确定性语料提供符合供应商格式的响应和访问控制,让官方 SDK 无需供应商账户或网络即可运行。

主要功能

  1. 01本地模拟多种企业 API
  2. 02支持官方供应商 SDK 和 HTTP 客户端
  3. 03确定性 SQLite 语料及 JSONL 导入
  4. 04模拟用户、令牌、群组和文档 ACL
  5. 05模拟分页、身份验证和错误
  6. 06将数据源作为 MCP 工具提供

适用场景

  1. 01无需供应商账户或凭据测试集成
  2. 02在本地和 CI 中运行可重复的集成测试
  3. 03评估 RAG 流水线和 Agent 行为
  4. 04用受控文档数据复现问题

MCP 相关

`backlot mcp` 通过标准输入输出启动 MCP 服务,并将所有数据源作为工具提供。编码 Agent 可借助这些工具创建或检查 Backlot 提供的数据。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"brekkylab-backlot": {
"command": "uvx",
"args": [
"backlot"
]
}
}
}
启动命令uvx backlot

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypibacklot0.1.0

工具

151

收录的工具列表 · 更新于 5 天前

参数类型必填说明
qstring否Issues/PR 搜索查询
pageany否要获取的结果页码。有关详情,请参阅“[在 REST API 中使用分页](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api)”。
per_pageany否每页的结果数(最多 100 条)。有关详情,请参阅“[在 REST API 中使用分页](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api)”。

详细介绍

Backlot

GitHub stars python PyPI tests License: Apache 2.0

Discord X

在本地运行企业 SaaS API。

Backlot 是 Slack、Gmail、Google Drive、GitHub、Jira、Notion、S3 及其他企业 API 的本地模拟器。它基于由你控制的确定性语料,复现集成必须处理的响应结构、分页、身份验证、错误和逐文档访问控制——让你无需供应商账号、无需OAuth 审批、无需在 CI 中保存密钥,也无需联网,即可使用官方供应商 SDK 进行构建和测试。

通过两种方式将 Slack 连接到应用的并排对比。左侧是真实的 Slack API:创建工作区、注册应用、添加机器人用户、选择 OAuth 作用域、注册重定向 URL、将应用安装到工作区——然后等待管理员批准,此时还没有发出任何 API 调用。右侧是 Backlot:pip install、backlot serve,只需更改一个基础 URL,之后 conversations.history 就会返回具有相同字段、分页和逐文档 ACL 的响应。耗费一天,对比只需几秒。

60 秒快速体验

pip install backlot
backlot import --bundled   # a corpus ships with the package; nothing to fetch or write
backlot serve              # every supported API, at http://127.0.0.1:8000

只需更改一个基础 URL,即可让官方 SDK 指向它:

from slack_sdk import WebClient  # pip install slack_sdk

slack = WebClient(token="admin-service-token", base_url="http://127.0.0.1:8000/slack/api/")
print(slack.conversations_list()["channels"])

同一调用在生产环境中访问 Slack,在开发环境中访问 Backlot。Backlot 提供数据和凭据;你的代码仍使用供应商的请求与响应约定。

测试也可以在空闲端口上启动自己的服务,无需事先启动或事后清理:

import backlot
from slack_sdk import WebClient

with backlot.serve() as s:  # no arguments: a tiny hello-world corpus
    slack = WebClient(token=s.token, base_url=f"{s.base_url}/slack/api/")
    channels = slack.conversations_list()["channels"]
让你的编码 Agent 即刻运行 Backlot

此仓库本身就是一个插件市场,因此无需克隆仓库,也无需先运行 pip install,即可安装Agent 技能。或者,将所有资源作为 MCP 工具交给 Agent:如果服务尚未运行,backlot mcp 会启动它,并通过 stdio 提供所有资源;添加 --user <email> 后,服务会以该用户身份响应。

claude plugin marketplace add brekkylab/backlot && claude plugin install backlot@brekkylab
codex plugin marketplace add brekkylab/backlot && codex plugin add backlot@brekkylab
pip install "backlot[mcp]" && claude mcp add backlot -- backlot mcp   # every source as MCP tools

并使用这样的提示词:

模拟我们的 Slack 工作区,在 #incidents 频道中创建三条消息,启动服务,然后告诉我 conversations.history 对该频道实际返回了什么。

为什么不用模拟对象?

手写模拟对象会返回你的代码已经预期的响应。Backlot 实现的是集成的另一端,因此会暴露模拟对象可能掩盖的假设——当你需要测试的是 API 的行为,而不只是单个响应的内容时,就该使用它。

❌ 手写模拟对象✅ Backlot
针对测试的响应字典通过 HTTP 提供符合供应商结构的响应
通常只覆盖正常路径分页、验证、身份验证和符合供应商结构的错误
自定义测试辅助工具官方供应商 SDK 和常规 HTTP 客户端
几乎没有或完全没有身份模型自动生成的用户、令牌、组和文档 ACL
测试之间的固定数据会逐渐偏离一套确定性语料,可在本地和 CI 中共享
每个 API 的模拟方式各不相同所有 API 由同一进程提供

服务内容

每个数据源都通过一个本地端口提供服务,并挂载在各自 SDK 所需的路径前缀下;所有数据源读取同一个 SQLite 语料库。

语料库定义事实:消息、文件、问题、作者、时间戳、线程、评论、标签和读者。Backlot 会据此派生稳定的 ID、用户、群组和令牌,因此每次运行提供的都是相同记录、相同的 ACL 筛选视图和相同页面。

它模拟所支持 API 中有文档说明的子集,而非每个供应商的所有端点。逐端点对照表列出了支持情况;已实现的端点若与真实 API 不一致,就是一个缺陷。

左侧是你的代码,它调用 Slack 和 GitHub SDK,只需更改基础 URL。中间是在 127.0.0.1:8000 上运行的一个本地服务,列出它提供的服务名称及各服务的路径前缀。右侧是所有服务共用的单个 SQLite 语料库。

服务基础路径官方 SDK 示例
Slack/slack/apislack.py
Microsoft Teams/msgraph/v1.0msteams.py
Gmail/gmail/v1gmail.py
Google Drive(Docs、Sheets、Slides)/drive/v3 /docs/v1 /sheets/v4 /slides/v1gdrive.py
GitHub/githubgithub.py
Jira/atlassian/rest/apijira.py
Confluence/atlassian/wiki/rest/apiconfluence.py
Notion/notion/v1notion.py
Linear/linear/graphqllinear/
HubSpot/hubspothubspot.py
Fireflies/fireflies/graphqlfireflies.py
Amazon S3/s3s3.py

路线图见跟踪议题——如需支持某个数据源,请在那里提出。

适用场景

  • 🔌 构建或升级集成。无需账户即可获取真实 API 返回的游标、分页结构和错误响应体。
  • 🧪 测试并持续验证。在笔记本电脑和 CI 中使用同一份夹具,无需密钥,也不会出现不稳定的测试。语料库中的每位用户都有一个令牌,因此你也可以断言一个调用者的文档绝不会传给另一个调用者。
  • 🤖 评估 RAG 流水线或 Agent。每次运行都使用相同的语料库、相同的 ID 和相同的答案,因此分数变化就意味着代码发生了变化。Slack 也支持写入,因此可以在这里运行会发帖、编辑或添加表情回应的 Agent,并根据其实际操作进行评分——一个端点会报告操作结果,另一个端点会将语料库恢复原状,以供下次运行使用(docs/write-overlay.md)。
  • 🐛 复现无法查看的数据中的缺陷。别人工作区中的文档导致你的解析器出错。编写一份结构相似的文档,提供服务,并保留失败的测试。

使用自己的语料库

随附的语料库涵盖所有受支持的服务,但主要工作流是提供你自己的测试环境:一个 JSONL 文件,每行一份源文档。

{"source_type":"slack","channel":"incidents","author_email":"[email protected]","created":"2026-02-10T18:00:00Z","content":"Anyone seeing 502s from the gateway?","replies":[{"content":"Looking now.","author_email":"[email protected]","created":"2026-02-10T18:00:40Z"}]}
backlot import my-corpus.jsonl --dry-run   # validate against each service's schema, touch nothing
backlot import my-corpus.jsonl && backlot serve

每个导入的身份都会获得确定性凭据,可通过 GET /_meta/users 查看;使用另一位用户的令牌发送相同请求,即可测试该调用者获准查看的内容。准备语料库介绍了架构、用户名单、分片语料库和公开数据集;身份验证与令牌介绍了各服务的身份验证方式。

示例

用途可运行示例
📦 官方供应商 SDK,每项服务一个脚本examples/using-official-sdk/
🔗 供 Agent 使用的 MCP 工具:backlot mcp,或将供应商自带的 MCP 服务指向 Backlotexamples/using-mcp-with-agents/
🦙 将其加载为文档,使用官方 LlamaIndex 读取器examples/using-llamaindex-readers/
🐍 通过 fsspec 文件系统,使用 pandas、pyarrow 或 dask 读取examples/using-fsspec/
🗂️ 通过 mirage 的虚拟文件系统,使用 ls、cat 和 grep 读取examples/using-mirage/
📥 从 JSONL 文件加载你自己的语料库examples/bring-your-own-corpus/

文档

Backlot 提供的所有数据源及其各自的所有端点docs/supported-sources.md
构建语料库和公共数据集docs/corpus.md
身份验证方案和令牌docs/auth.md
衡量 Backlot 与真实 API 的一致性docs/fidelity.md
写入操作及其目标位置docs/write-overlay.md
所有 BACKLOT_* 设置和 Dockerdocs/configuration.md
使用情况遥测:收集原因、发送内容以及关闭方法docs/telemetry.md
声明和商标NOTICE.md

贡献

请参阅 CONTRIBUTING.md。与真实 API 保持一致是核心目标,因此任何偏差都是错误——请对照真实服务进行衡量,并提交一个在修复前会失败的测试。

Backlot 的存在离不开所有贡献者的支持。

Backlot 贡献者的头像

许可证

Apache-2.0。NOTICE.md 说明了早期版本采用的 MIT License。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。