通过MCP使用RunApps
RunApps(https://www.runapps.ai)发布**AI Web应用**:创作者上传一个静态前端代码包(zip),应用在专属的https://<slug>.runapps.dev上提供服务,用户使用一个RunApps账户登录并支付自己的模型使用费用,创作者则从每次调用中获得费用。以下所有操作均通过runapps MCP服务器和SDK完成。尚未连接?请参阅“连接”。
本文档是入口点:连接、平台模型、工具目录、工作流程和规则。SDK(应用代码如何与模型和文件交互)位于references/sdk.md;精确的工具参数位于references/tools.md。仅读取任务所需的内容。
连接(授权)
权威且始终最新的版本位于https://www.runapps.ai/agent/setup.md;以下是简版。用户永远不会为您输入密码,您也永远不会看到密码:您请求一个密钥,用户在浏览器中单击一次“批准”。
- 请求密钥:
POST https://www.runapps.ai/api/agent/device/code,JSON内容为{"name": "<您的名称> @ <机器>", "scopes": "read,develop,publish,gateway"}。响应中包含device_code、user_code、verification_uri_complete(https://www.runapps.ai/agent/authorize?code=XXXX-XXXX)、expires_in(600秒)和interval(5秒)。向用户逐字显示verification_uri_complete,并要求他们打开并批准。name是密钥的身份标识:批准一个同名的请求将吊销之前同名的密钥,因此重新运行设置不会堆积密钥。 - 轮询:每隔
interval秒POST https://www.runapps.ai/api/agent/device/token,JSON内容为{"device_code": "…"}。status为pending(等待)、slow_down(后退)、denied/expired(停止并告知用户)或approved(批准),后者返回api_key(rk_…)、key_prefix、scopes和mcp_url——仅一次。立即将其写入您的MCP配置;切勿写入对话、日志或代码仓库。 - 连接:MCP Streamable HTTP,地址
https://www.runapps.ai/api/mcp,请求头Authorization: Bearer <api_key>。Claude Code:claude mcp add --transport http runapps "https://www.runapps.ai/api/mcp" --header "Authorization: Bearer <api_key>"。Codex:[mcp_servers.runapps] url = "https://www.runapps.ai/api/mcp",http_headers = { Authorization = "Bearer <api_key>" }。其他客户端:使用相同的URL和请求头。然后执行tools/list;initialize返回的instructions会给出推荐的工作流程。
作用域:默认授予read、develop、publish、gateway;danger(删除/取消发布)永远不会包含在内,除非您明确请求并告知用户原因。用户可以在批准页面上取消勾选作用域,稍后在https://www.runapps.ai/dashboard/api上重命名密钥、更改其作用域或吊销它(作用域更改将在您下次调用时生效,无需新密钥)。未获得对应作用域的工具调用会返回一个指出缺失作用域的错误:请要求用户重新授权,不要尝试绕过。
同一个密钥在网关(https://www.runapps.ai/v1,兼容OpenAI,Authorization: Bearer rk_…)上也可用,前提是它具有gateway作用域——用于测试您构建的应用;每次调用都会向用户收费。要永久断开连接,请使用confirm: true调用revoke_my_key。
平台模型
| 对象 | 说明 | 访问方式 |
|---|---|---|
| 应用(项目) | 一个已发布的代码包,带有平台分配的slug、名称、一行描述、Markdown长描述、类别、图标、可见性和创作者费用(rebate_rate)。创建时为草稿,无代码包,因此在编写任何代码之前slug就已经存在。 | list_apps、get_app、create_app、update_app |
| 代码包 | 应用构建结果的zip文件。整体存储;文件从https://<slug>.runapps.dev中提供。点文件(.private/…)永远不会被提供;zip根目录下的index.html是默认入口。 | upload_bundle(+ PUT)、upload_bundle_base64、check_bundle |
| 可见性 | draft(仅创建者可见)→ private(不公开:任何拥有链接的人可访问,无需审核)或public(在应用库中;第一次切换到public需要审核并显示为pending,之后的更新立即生效;拒绝时会附带review_note)。 | 使用visibility调用update_app,get_review |
| 用户与登录 | 用户在应用内使用其RunApps账户登录(SDK执行此操作;new RunApps(),不带密钥)。每个用户支付自己的模型使用费用加上创作者费用。应用绝不持有一个密钥。 | SDK(references/sdk.md) |
| 私有提示 | 应用提供但浏览器不可见的提示文件:zip中的.private/prompts/<id>.md;应用发送prompt: { id, vars },网关填充并前置该内容。 | get_app / check_bundle 列出找到的id |
| 用户文件与同步 | 每个用户每个应用都有一个文件空间(client.files),以及一个IndexedDB同步(client.sync),将本地数据库镜像到该空间中。 | SDK |
| 模型 | 聊天、视觉、图像、语音、转录、视频、嵌入和实时模型的目录;请求通过其目录名称指定模型。 | list_models |
| 代理密钥 | 您持有的rk_密钥:kind = agent,有作用域;列在用户的API密钥下。 | revoke_my_key |
类别:创意、内容、生产力、市场营销、工程、设计、研究、数据分析、商务、金融。
工作流程
- 创建:使用
name(以及description、category)调用create_app。结果包含slug(proj-xxxxxxxx,由平台分配,您或用户绝不能选择;管理员稍后可以为已上架的应用提供一个易读的slug)和url。将slug告知用户。 - 本地开发,针对slug进行(
references/sdk.md,“构建应用”):从<script src="https://www.runapps.ai/sdk/latest.js"></script> <script> const client = new RunApps({ project: "<slug>" }); const r = await client.chat.create({ model: "Claude Sonnet 4.6", messages: [{ role: "user", content: "hi" }] }); </script>http://localhost:<port>登录可以正常工作,调用会通过真实的网关。从list_models中选择模型(使用精确名称)。切勿在应用代码中放入rk_密钥。 - 构建并压缩构建文件夹的内容:
cd dist && zip -r ../app.zip .,确保index.html位于zip的根目录(直接压缩文件夹本身是最常见的错误)。绝对路径资源可以正常工作;点文件夹会被隐藏。 - 上传:
upload_bundle→PUT将zip上传到upload_url(curl -sS -X PUT -H 'Content-Type: application/zip' --data-binary @app.zip '<upload_url>')。PUT的响应是代码包报告:修复每个警告(未加载SDK、入口不在根目录、页面中包含密钥)。check_bundle可随时重新读取该报告。 - 描述:使用
description(一行,说明应用功能)、long_description(Markdown:用户能得到什么、如何使用、实际成本如何)、category、icon_url(正方形PNG/SVG,https或data URL)调用update_app。 - 发布:调用
update_app,将visibility设置为"private"以获得可分享的链接,或设置为"public"以进入应用库。设置为"public"后,get_review会显示pending,直到审核者做出决定;rejected会附带review_note,您需要据此处理,然后再次设置为public。在发布之前,自己打开url(或要求用户打开):加载失败或显示空白页面的代码包将被拒绝。
更新:可以随时上传新的代码包或更改元数据;公共应用保持公开状态。
规则
[danger]工具(unpublish_app、delete_app)会删除其他人可能正在使用的内容。请先询问用户,并在他们同意后才传递confirm: true;没有danger作用域时,这些工具也会被拒绝。- 使用
gateway作用域进行的每次模型调用,以及用户应用进行的每次调用,都会产生实际费用。使用简短的提示和便宜的模型进行测试;list_models会提供价格。 - 密钥是用户的:每台机器一个(
name用于区分),绝不可共享,除MCP配置外绝不可写入任何地方。当要求断开连接时,使用revoke_my_key吊销。 - 不要捏造模型名称;使用
list_models。未知名称会导致400错误,绝不会静默替换。 - 私有提示的文本必须保持私有:网关会拒绝回显该提示的回复。
接下来阅读什么
| 任务 | 阅读 |
|---|---|
| 编写应用:登录、聊天、流式传输、图像、音频、视频、文件、同步、私有提示、错误 | references/sdk.md |
| 精确的工具参数和结果形状 | references/tools.md |
| 连接(完整文本,始终最新) | https://www.runapps.ai/agent/setup.md |
| 构建代码包、发布、收益 | references/sdk.md → “构建应用”,“发布它” |