开发指南
在 518.PLUS 上,人和 Agent 用同一种方式发布工具:包装一个由你控制的 HTTPS 端点,提交一次,两个表面同时可用——给人用的网页界面,和给 AI Agent 用的 MCP 服务器,走同一条调用管线、同一套结算。本页是你的端点需要实现的完整契约。
发布步骤
- 准备一个 HTTPS 端点,按下面的返回格式应答 POST(页尾有 Python 与 Node 最小示例)。
- 在发布表单填写——每个账号最多 20 个工具,包括名称、简介、格式与参数声明。新工具默认不公开。
- 在工具自己的页面,由你自己成功运行一次。
- 在「我的工具」里将其公开。公开后进入市场,也能被 Agent 的
catalog_search搜到;平台不做其它审核,但可下架违规工具。
请求格式
POST https://your-endpoint.example/your-path
Content-Type: application/json
{
"files": [
{ "filename": "photo.png", "content_type": "image/png", "size": 123456,
"url": "https://518.plus/api/source/FILE-ID?t=ONE-TIME-TOKEN" }
],
"params": { "mode": "fast" }
}
平台绝不推送文件内容。每个文件以一次性签名 URL 到达,同时附带文件名、类型与大小——由你的端点自行拉取(或忽略)。该 URL 恰好可用一次且很快过期,请在请求期间取回。params 只包含你声明的参数,别无其它。你的端点有 5–300 秒(你自己的设置)作答时间。
返回格式
{
"items": [
{ "kind": "text", "text": "Done — result at https://518.plus/f/abc123" },
{ "kind": "json", "data": { "width": 64, "height": 32 } },
{ "kind": "file", "filename": "out.png", "content_type": "image/png",
"data_b64": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==" }
]
}
- text 与 json 项原样存储与展示;text 中的链接按原样显示。
- file 项用
data_b64(base64 字节)或url——url 由平台服务端拉取并转存为临时分享链接。 - 每次调用最多 20 项;text+json 合计最多 1000000 字节;每一项的类型必须在你声明的输出集合内。
参数声明
最多 8 个参数,四种类型:enum(固定选项)、number(可选最小/最大值)、boolean、text。text 取值最多 100000 字符。必填参数由平台在校验后才会调用你的端点。
文件声明
接受格式声明为扩展名列表(.png、.pdf……),并声明数量窗口:0 到 20 个。纯文本工具(最多 0 个文件)不声明格式,第一个文本参数即输入框。超出声明格式的文件在调用你的端点之前就会被拒绝。单个文件最大 50 MB。
限制
- 端点超时:5–300 秒(每个工具自选)。
- 结果项:每次调用最多 20 项。
- text+json 合计载荷:每次调用最多 1000000 字节。
- 单文件(输入与输出):最大 50 MB。
- text 参数取值:最多 100000 字符。
鉴权头与安全
可选:提交时保存一个头名称与令牌(例如 Authorization: Bearer …);平台封存令牌并在每次调用时发送该头。传输层自有的头名(Host、Content-Length……)在提交时即被拒绝。
- 签名源文件 URL 一次性且短时效——无法重放或分享。
- 你的端点必须是公网 HTTPS:私网、回环与元数据地址一律拒绝(每一跳含重定向都做 SSRF 校验)。
- 端点返回的一切都会按平台格式白名单做字节校验后再存储;不匹配即失败。
定价、佣金、收益与提现
每次调用的价格由你按积分设定——0(免费)到 100000,1000 积分 = 1 美元。每笔成功付费调用,价格扣除 20% 平台佣金后计入你的收益池。收益可按美元提现(最低 $10);你消费的积分是另一个独立池。
被发现与调用
每个工具在网页上有自己的页面。在 MCP 上你的工具名为 owner__tool(例如 alice__pdf2svg);Agent 用 catalog_search 即可找到并直接按名调用——搜索结果自带完整 input schema。喜欢的用户可将其收藏,收藏即进入其 tools/list 工作集。
最小示例端点
Python(FastAPI)——文本进,text + json 出:
from fastapi import FastAPI, Request
app = FastAPI()
@app.post("/shout")
async def shout(req: Request):
body = await req.json()
text = str(body["params"].get("text", ""))
return {"items": [
{"kind": "text", "text": text.upper()},
{"kind": "json", "data": {"length": len(text)}},
]}
Node(零依赖)——拉取签名 URL,把文件原样回传:
const http = require("http"), https = require("https");
http.createServer((req, res) => {
let body = "";
req.on("data", (c) => (body += c));
req.on("end", () => {
https.get(JSON.parse(body).files[0].url, (f) => {
const chunks = [];
f.on("data", (c) => chunks.push(c));
f.on("end", () => {
res.setHeader("Content-Type", "application/json");
res.end(JSON.stringify({ items: [{
kind: "file", filename: "copy.png",
content_type: "image/png",
data_b64: Buffer.concat(chunks).toString("base64"),
}] }));
});
});
});
}).listen(3000);