关于 YC GraphQL MCP · Distributed Systems
YC GraphQL MCP 是本地 MCP 服务,通过 YC 的 GraphQL API 读取和编辑 Y Combinator 申请。它侧重于经审阅的变更、权限与并发检查、持久化变更凭据,以及保存后的回读验证。
主要功能
- 01读取申请和创始人资料
- 02检查字段、权限和 GraphQL 架构
- 03预览带精确差异的类型化编辑
- 04提交前检查并发变更
- 05验证保存结果并查看持久化凭据
- 06可选的 Chrome 扩展传输
适用场景
- 01检查申请答案的清晰度和一致性
- 02比较草稿与当前申请字段
- 03执行获授权的编辑并验证保存值
- 04在无法内省时检查 GraphQL 操作
MCP 相关
它将 YC 申请、资料、架构、操作和变更流程作为 MCP 工具提供,并附带指南与状态资源及审阅提示词。服务直接连接 YC 的 GraphQL API;除选择可选扩展传输外,浏览器仅用于手动登录。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
YC GraphQL MCP
通过 MCP 客户端查看你的 YC 申请。读取答案、审阅修改,并验证每次保存。
v2.1.0 · 22 个工具 · Node 22 / 24 / 26 · MIT
本地 MCP 服务,可通过 HTTP 直接访问 https://apply.ycombinator.com/graphql。2.1.0 版包含 22 个工具、私密会话捕获与轮换、持久化变更回执、申请和个人资料读取、操作发现,以及可选的 Chrome 扩展传输方式。
Node 会发送 API 请求。只有手动登录时才需要浏览器,除非你明确选择扩展传输方式。这是非官方客户端;上游 API、身份验证规则和申请编辑权限均由 YC 管理。
试着向 MCP 客户端提出以下请求:
读取我的申请,并指出表述不清的答案、重复的观点和矛盾之处。保留我的数字,并区分事实与建议。
将我当前的答案与这份草稿进行比较。展示确切的拟议字段变更,然后再准备任何内容。
读回我上次修改的字段,并与回执进行比较。告诉我哪些内容确实已保存。
安装并连接
使用 Node.js 22.13+;推荐使用 Node 24 或 26。在源代码检出目录中:
git clone https://github.com/arthurcolle/yc-graphql-mcp.git
cd yc-graphql-mcp
npm ci --ignore-scripts
npm run build
npx playwright install chromium
npm run login
在 Chromium 窗口中登录。该辅助程序会直接从 Node 验证只读账户查询,将所需的会话标头保存到私密文件中,然后关闭临时浏览器。它不会捕获你的密码,也不会保存完整的浏览器配置文件。
在 MCP 宿主中添加以下配置,并使用绝对路径:
{
"mcpServers": {
"yc": {
"command": "node",
"args": [
"/absolute/path/yc-graphql-mcp/dist/cli.js",
"--auth-file",
"/absolute/path/private-yc/auth.json",
"--state-dir",
"/absolute/path/private-yc/state"
]
}
}
}
登录时使用相同的身份验证文件路径,例如:
node dist/cli.js login --auth-file /absolute/path/private-yc/auth.json
默认状态目录为 $XDG_STATE_HOME/yc-graphql-mcp 或 ~/.local/state/yc-graphql-mcp。身份验证文件默认位于该状态目录中的 auth.json。已有的检出目录若包含 .yc-graphql-mcp/auth.json,则会继续使用该旧路径。YC_AUTH_FILE、YC_MCP_STATE_DIR 和显式 CLI 标志会覆盖默认值。
身份验证文件必须是由你拥有且权限为 0600 的普通文件。其目录必须是私密的(0700)。请勿将凭据放入 MCP 参数、聊天内容、源代码管理或日志中。工具返回的申请答案对 MCP 宿主/模型可见。
使用
先调用 yc_status,然后调用 yc_list_applications 和 yc_get_application。内置读取使用从 YC 自身应用程序包中观察到的操作,无需进行架构内省即可使用。它们会省略邀请令牌、签名媒体 URL、产品登录凭据,以及不必要的联系方式和地址字段。
| 工具 | 用途 |
|---|---|
yc_get_editability | 实时表单字段和当前申请权限 |
yc_prepare_application_update | 提供精确差异和前置条件的类型化文本更改 |
yc_commit_application_update | 重新检查、提交一次,并自动验证已保存的答案 |
yc_verify_application_update | 将当前答案与预期值进行比较,不执行写入 |
yc_export_application | 将私密 Markdown 返回给你的 MCP 主机;不写入任何文件 |
yc_status | 本地身份验证状态、传输方式、存储健康状况、待处理工作和变更策略 |
yc_connection | 设置信息;浏览器模式下提供扩展配对 JSON |
yc_list_applications | 申请摘要、创始人引用和编辑标记 |
yc_get_application | 某个申请 UUID 的答案和状态 |
yc_get_founder_profile | 某个个人简介 UUID 对应的创始人背景叙述、教育经历和工作经历 |
yc_describe_schema | GraphQL 根类型(如果 YC 允许进行内省) |
yc_describe_type | 类型字段、输入、参数、枚举和弃用信息 |
yc_introspect_schema | 完整架构,大小上限为 2 MB |
yc_inspect_scripts | 搜索引用的 JavaScript,不执行它 |
yc_query | 执行一个明确命名的查询 |
yc_register_operation | 在本地保存已观察到的文档;不执行 |
yc_list_operations | 列出已保存的文档 |
yc_remove_operation | 在本地移除已保存的文档 |
yc_run_operation | 使用变量执行已保存的查询 |
yc_prepare_mutation | 生成包含持久回执的精确负载预览,但不执行 |
yc_commit_mutation | 提交一次已审核的预览 |
yc_mutation_receipts | 查看近期或指定的持久回执 |
资源:yc://guide、yc://status、yc://operations、yc://receipts 和 yc://receipts/{id}。提示词:inspect_application 和 review_application_change。
所有工具均返回 { ok, data?, error?, untrustedContent: true }。工具错误会设置 MCP isError;SDK 会在执行前拒绝无效参数。GraphQL 数据和脚本摘录均为不可信内容,绝不是指令。名为 error 的返回字段会保留为应用程序数据。
YC 可能会拒绝内省。遇到这种情况,请使用内置读取、已观察操作注册表或有限范围的脚本检查。遇到身份验证或访问限制时请停止;支持刷新你自己的会话,但不支持绕过限制。
Typed application updates
yc_get_editability 会读取当前 GraphQL 权限并解析经过身份验证的编辑表单。它会返回字段名称、问题标签、更新类型和必填标记。绝不会根据 GraphQL 输入类型或其他更新表单推断完整编辑字段。
使用 yc_prepare_application_update 准备文本更改:
{
"appUuid": "63a4d22c-1096-443e-894b-349e9c46fabb",
"updateKind": "progress",
"changes": [
{ "field": "howfar", "expectedValue": "Previous answer", "value": "Reviewed new answer" }
],
"idempotencyKey": "fd01ac64-94bb-4e85-8f6d-289af6132c16"
}
示例使用的是虚构标识符。准备操作会读取当前数据并返回精确的更改前后值,但不会发送任何变更。除非明确提供 allowFinancialChanges: true,否则财务答案会受到保护。上传、结构化收入表和创始人资料更改应使用各自专用或通用的观测工作流。
使用 yc_commit_application_update 提交其回执和摘要。发送前,服务端会重新检查当前答案、提交状态和实时字段权限。并发编辑会阻止写入;即使是通用提交工具也无法绕过此保护。YC 不提供原子 compare-and-swap,因此最后一次检查后仍可能发生竞态。
类型化提交会自动回读字段。POSTCONDITION_FAILED 或 VERIFICATION_UNAVAILABLE 会包含终态回执,且不会重新发送。验证证据会返回给调用方,不会与私人答案一起保存在回执日志中。回执的 succeeded 状态描述明确的后端结果;单独的验证则描述当前观测到的值。
中断后,使用 yc_verify_application_update 比较预期答案;如需导出私人 Markdown,则使用 yc_export_application。二者都不会更改申请数据。重启后预览会过期;持久化的回执去重仍然有效。
Registry 和桌面应用包
从 Releases 下载 .mcpb,用于兼容的桌面主机;或使用上文的源码安装方式。此应用包包含生产依赖,已通过官方 MCPB 架构验证并在解压后测试。它不包含会话或申请记录。请参阅 应用包设置。
官方 Registry 名称:io.github.arthurcolle/yc-graphql-mcp。官方列表 · Glama 列表。Registry 指向确切的版本化应用包及其 SHA-256。它不托管你的 YC 会话,也不提供 HTTP MCP 端点。发布详情介绍了验证、OIDC 发布和恢复。npm 发布是独立的,并非此分发途径所必需。
变更契约
默认禁用变更。使用 --allow-mutations 或显式进程设置 YC_ALLOW_MUTATIONS=true 启用;浏览器模式还需要启用扩展程序开关。应用编辑仍需获得对确切预期变更的授权。
- 读取当前应用及其编辑权限。
- 使用
yc_prepare_mutation准备确切命名的变更、变量和 UUIDidempotencyKey。 - 检查预览、选定目标和摘要。准备操作不会联系 YC。
- 使用回执 ID 和匹配的摘要提交。载荷不可变,并在十分钟后过期。身份验证变更会使预览失效。
- 回读已变更的字段。不要根据 HTTP 200 响应推断数据已持久化。
| 回执状态 | 含义 |
|---|---|
prepared | 已记录预览;尚未发送 |
dispatched | 传输发送前已写入持久记录 |
succeeded | 选定的根结果明确报告成功,且没有被拒绝,也没有缺少请求的 YC 实体 |
rejected | YC 报告失败、错误或未持久化 |
unverified | 已返回数据,但无法据此确认保存成功 |
uncertain | 发送可能已生效;无法确认是否完成 |
not_sent | 最终身份验证检查发现发送前目标已变更 |
expired | 惰性预览已过期或因重启而失效 |
所有终态回执均不可重放。重复提交会返回原始结果,绝不会再次发送变更。新回执包含 version: 2。旧版回执会予以保留;旧版 succeeded 条目仅表示旧客户端收到了 GraphQL 信封。重放此类条目会返回 MUTATION_UNVERIFIED,而不会断言历史上的持久化结果。
响应丢失、超时、取消、断开连接、部分 GraphQL 失败以及发送后发生的存储故障,都需要回读。切勿仅为重试不确定的操作而创建新密钥。 被拒绝的结果并不保证所有上游副作用都已回滚。日志提供本地去重,而非上游恰好执行一次的保证。
会话与边界
- Cookie 和 CSRF 标头从私有身份验证文件中加载,且仅发送到固定的 YC 源站。绝不跟随重定向。静态脚本请求不会收到会话标头。
- YC 的
Set-Cookie轮换会以原子方式持久化。较早发出的在途响应无法覆盖较新的手动登录。会话过期或被拒绝时,必须运行yc-graphql-mcp login;不会静默重试。 - 返回的数据会清除当前 Cookie 标头、CSRF 值和较大的 Cookie 值。不会向外提供上游原始错误消息。请求的应用内容仍会对调用方可见。
- 一个进程一次只处理一个上游任务。并发调用会返回
BRIDGE_BUSY;不存在隐藏的执行队列。 - 文档、变量、片段展开、JSON 深度、响应流、脚本下载和工具输出摘录都有有限的大小限制。取消操作和截止时间适用于标头等待及响应正文。
- 状态存储会验证收据架构和状态转换,使用独占锁定,在分发前刷新,并在压缩时保留幂等键。损坏或写入不完整的日志会阻止启动。容量耗尽时会阻止创建新的预览,而不会删除历史记录。
- 符号链接、硬链接、所有权不正确以及权限过于开放的状态文件或身份验证文件都会被拒绝。原子替换会刷新文件及其父目录。
- 标准输出仅用于 MCP 协议。可选的 JSON 诊断信息会写入标准错误,其中包含工具名称、请求 ID、耗时和稳定的错误代码,绝不包含标头、查询、变量或应用回答。
详细的限制、恢复流程、存储语义和上游约束见运维指南。接口审查和回归矩阵见工具契约。
CLI 和运维
node dist/cli.js --help
node dist/cli.js doctor --auth-file /private/path/auth.json --state-dir /private/path/state
node dist/cli.js --log-level info
node dist/cli.js --transport browser --port 0
node dist/cli.js connection --transport browser
doctor 仅执行只读操作,不会连接 YC。yc_status 会区分已配置的本地凭据和通过成功请求验证的会话。就绪状态取决于具体账户:仅有有效的本地身份验证文件并不能证明当前已获授权。
要使用浏览器模式,请将 extension/dist 作为未打包的 Chrome 扩展程序加载,选择已登录的 YC 标签页,粘贴 yc_connection JSON,然后连接。其回环桥接会验证 Host、扩展程序 Origin 和新的配对令牌;它不是 HTTP MCP 端点。需要 Chrome/Chromium 116+。独立控制台客户端仍可通过 dist/yc-client.js 使用;它不具备服务端持久化的变更收据。
一个 MCP 进程独占一个状态目录。多个主机应使用不同的状态目录;它们的去重历史彼此独立。备份或维护状态前,请停止所有写入进程。切勿删除收据来恢复锁定或使变更操作可以重试。
构建、测试和打包
npm run verify # formatting, strict TypeScript, clean build, regression tests
npm run test:e2e # isolated Chromium extension test; all HTTP(S) intercepted
npm run pack:verify # fresh tarball, production-only install, actual MCP handshake
npm audit --omit=dev
npm run live:check # optional authenticated read-only smoke test in this checkout
npm pack # build and produce a local installable tarball
测试涵盖被拒绝的保存、空实体、重复提交、不可变预览、身份验证竞态、磁盘故障、令牌轮换、流截止时间、恶意文件链接、日志损坏与压缩、真实的 SIGKILL 恢复和 SIGTERM 排空、输入/输出架构,以及新旧 MCP 客户端。浏览器测试和变异测试使用隔离的测试夹具;实时冒烟测试不会发送任何变更。
软件包允许列表排除本地身份验证、应用程序/备份、日志、测试夹具和特定账户的管理脚本。运行时依赖项包括登录辅助工具使用的浏览器库,因此可以运行 npm install --omit=dev。Chromium 需单独安装。该软件包为私有软件包,不会发布到 npm。
由 Distributed Systems 制作。欢迎贡献;请从 CONTRIBUTING.md 开始。代码采用 MIT 许可。Distributed Systems 名称和铜色字标仍为品牌资产;该许可不授予商标权。请参阅资产来源。
CI 会验证 Node 22/24/26、隔离的 Chromium 作业,以及全新安装的桌面端软件包。主要实现参考:MCP TypeScript SDK、GraphQL 验证、Node 文件 API、tough-cookie 和 Playwright。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。
