Communitygithub.com

RunApps技能

通过MCP工具在RunApps(runapps.ai)上构建并发布AI Web应用,并使用RunApps JavaScript SDK(@runappsai/sdk)编写应用代码。涵盖授权连接(设备码流程、代理密钥、Bearer头、作用域)、平台模型(应用、代码包、slug、可见性与审核、创作者费用)、所有MCP工具、SDK(登录、聊天、图像、音频、视频、用户文件、IndexedDB同步、私有提示)、代码包规则(zip布局、点文件、入口页面)以及安全规则。每当连接了RunApps MCP服务器,或任务提及RunApps、runapps.dev、在此发布应用、RunApps SDK或rk_密钥时使用。

RunApps技能 是什么?

该技能让AI代理能够通过MCP协议与RunApps平台交互,使用户可以构建并发布AI Web应用。用户通过设备码流程获取代理密钥,然后通过Bearer头认证连接MCP服务器。技能涵盖了完整的平台模型,包括应用创建、代码包上传(zip格式,入口必须为index.html)、可见性管理(草稿、私有、公共,首次公开需审核)以及创作者费用机制。它还详细说明了RunApps JavaScript SDK的使用,包括用户登录、模型调用(聊天、图像、音频、视频)、用户文件存储和IndexedDB同步。为了确保安全,技能规定密钥只能存放在MCP配置中、不可泄露、不可嵌入应用代码;并且私有提示文件(位于.private/目录)不会向浏览器暴露。模型名称必须通过list_models工具获取,不可捏造。该技能适用于Claude Code、Codex及其他支持MCP Streamable HTTP的客户端。

兼容平台✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/runapps/skills/tree/HEAD/runapps

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

通过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;以下是简版。用户永远不会为您输入密码,您也永远不会看到密码:您请求一个密钥,用户在浏览器中单击一次“批准”。

  1. 请求密钥: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是密钥的身份标识:批准一个同名的请求将吊销之前同名的密钥,因此重新运行设置不会堆积密钥。
  2. 轮询:每隔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配置;切勿写入对话、日志或代码仓库。
  3. 连接: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

类别:创意、内容、生产力、市场营销、工程、设计、研究、数据分析、商务、金融。

工作流程

  1. 创建:使用name(以及description、category)调用create_app。结果包含slug(proj-xxxxxxxx,由平台分配,您或用户绝不能选择;管理员稍后可以为已上架的应用提供一个易读的slug)和url。将slug告知用户。
  2. 本地开发,针对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_密钥。
  3. 构建并压缩构建文件夹的内容:cd dist && zip -r ../app.zip .,确保index.html位于zip的根目录(直接压缩文件夹本身是最常见的错误)。绝对路径资源可以正常工作;点文件夹会被隐藏。
  4. 上传: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可随时重新读取该报告。
  5. 描述:使用description(一行,说明应用功能)、long_description(Markdown:用户能得到什么、如何使用、实际成本如何)、category、icon_url(正方形PNG/SVG,https或data URL)调用update_app。
  6. 发布:调用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 → “构建应用”,“发布它”

相关技能