submitby.ai
A software directory your agent submits to. Search, submit, verify, and manage listings through MCP.
我该使用它吗
质量与安全性
基于对工具定义和协议合规性的自动分析。
上下文开销
这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。
安装
一键安装
将以下内容添加到你的 `claude_desktop_config.json` 文件中:
{
"mcpServers": {
"submitbyai": {
"url": "https://submitby.ai/mcp"
}
}
}远程端点
https://submitby.ai/mcpstreamable-http它能做什么
工具清单
工具(12)
🟡submit_project(url, name, description, icon_url, category, ...)
Create a private project draft. No signup. Save the returned control token securely. Reuse the same random idempotency key for retries. Optional listing fields (tagline, long_description, audience, not_for, screenshots, video_url, pricing, platforms, links, mcp_url, openapi_url, app_store_url, play_store_url, alternatives, faq) raise listing completeness; write them in your own words from facts on the website.
输入模式
{
"type": "object",
"properties": {
"url": {
"type": "string",
"maxLength": 2048
},
"name": {
"type": "string",
"minLength": 2,
"maxLength": 80
},
"description": {
"default": "",
"type": "string",
"maxLength": 500
},
"icon_url": {
"description": "Optional public HTTPS icon URL. Omit or set null to discover the first Apple touch icon, then the favicon.",
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 2048
},
{
"type": "null"
}
]
},
"category": {
"type": "string",
"maxLength": 100
},
"tags": {
"type": "string",
"maxLength": 1500
},
"route": {
"default": "badge",
"type": "string",
"enum": [
"badge",
"paid"
]
},
"tagline": {
"description": "One line, in your own words. Shown on cards.",
"type": "string",
"minLength": 10,
"maxLength": 100
},
"long_description": {
"description": "Plain text, 200-800 words. Separate paragraphs with a blank line. Explain what it does, how it works, and how it differs. Do not copy website text.",
"type": "string",
"minLength": 300,
"maxLength": 6000
},
"audience": {
"description": "Who the project is for.",
"type": "string",
"minLength": 10,
"maxLength": 500
},
"not_for": {
"description": "Who should choose something else.",
"type": "string",
"minLength": 10,
"maxLength": 500
},
"screenshots": {
"description": "Up to 8 screenshots. We copy them; hosted images must stay public until verification finishes.",
"maxItems": 8,
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"maxLength": 2048,
"description": "Public HTTPS PNG, JPEG, or WebP, max 2 MB."
},
"alt": {
"type": "string",
"minLength": 3,
"maxLength": 200
}
},
"required": [
"url",
"alt"
],
"additionalProperties": false
}
},
"video_url": {
"description": "Public demo video page.",
"type": "string",
"maxLength": 2048
},
"pricing": {
"type": "object",
"properties": {
"model": {
"type": "string",
"enum": [
"free",
"freemium",
"free_trial",
"paid",
"open_source",
"contact_sales"
]
},
"starting_price": {
"description": "For example: $6/month.",
"type": "string",
"maxLength": 40
},
"free_plan": {
"type": "boolean"
}
},
"required": [
"model"
],
"additionalProperties": false
},
"platforms": {
"maxItems": 12,
"type": "array",
"items": {
"type": "string",
"enum": [
"web",
"ios",
"ipados",
"watchos",
"visionos",
"android",
"macos",
"windows",
"linux",
"chrome",
"firefox",
"safari",
"vscode",
"cli",
"api",
"mcp",
"wordpress",
"figma",
"slack",
"other"
]
}
},
"links": {
"description": "Official profiles and pages of the project.",
"type": "object",
"propertyNames": {
"type": "string",
"enum": [
"x",
"bluesky",
"mastodon",
"linkedin",
"github",
"discord",
"youtube",
"reddit",
"producthunt",
"docs",
"changelog",
"pricing",
"status",
"blog"
]
},
"additionalProperties": {
"type": "string",
"maxLength": 2048
}
},
"mcp_url": {
"description": "Remote MCP endpoint. We check that it answers initialize.",
"type": "string",
"maxLength": 2048
},
"openapi_url": {
"type": "string",
"maxLength": 2048
},
"app_store_url": {
"type": "string",
"maxLength": 2048
},
"play_store_url": {
"type": "string",
"maxLength": 2048
},
"alternatives": {
"description": "Websites of similar products.",
"maxItems": 5,
"type": "array",
"items": {
"type": "string",
"maxLength": 2048
}
},
"faq": {
"description": "Answer the faq_questions from get_submission, or your own. Answers must match the website.",
"maxItems": 10,
"type": "array",
"items": {
"type": "object",
"properties": {
"question": {
"type": "string",
"minLength": 5,
"maxLength": 200
},
"answer": {
"type": "string",
"minLength": 20,
"maxLength": 1000
}
},
"required": [
"question",
"answer"
],
"additionalProperties": false
}
},
"idempotency_key": {
"type": "string",
"minLength": 32,
"maxLength": 128
}
},
"required": [
"url",
"name",
"idempotency_key"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢get_submission(id, control_token)
Read private status, listing completeness, suggested faq_questions, the private agent-readiness report, and exact next actions.
输入模式
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"control_token": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"id"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪verify_submission(id, control_token)
Request website and badge verification. Call after installing the returned snippet or file.
输入模式
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"control_token": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"id"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🔴update_submission(name, description, icon_url, category, tags, ...)
Update the name, description, or any listing field. Send null to remove a field. Changes run the automatic checks again; the listing stays in review until they pass.
输入模式
{
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 2,
"maxLength": 80
},
"description": {
"default": "",
"type": "string",
"maxLength": 500
},
"icon_url": {
"description": "Optional public HTTPS icon URL. Omit or set null to discover the first Apple touch icon, then the favicon.",
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 2048
},
{
"type": "null"
}
]
},
"category": {
"type": "string",
"maxLength": 100
},
"tags": {
"type": "string",
"maxLength": 1500
},
"route": {
"default": "badge",
"type": "string",
"enum": [
"badge",
"paid"
]
},
"tagline": {
"anyOf": [
{
"description": "One line, in your own words. Shown on cards.",
"type": "string",
"minLength": 10,
"maxLength": 100
},
{
"type": "null"
}
]
},
"long_description": {
"anyOf": [
{
"description": "Plain text, 200-800 words. Separate paragraphs with a blank line. Explain what it does, how it works, and how it differs. Do not copy website text.",
"type": "string",
"minLength": 300,
"maxLength": 6000
},
{
"type": "null"
}
]
},
"audience": {
"anyOf": [
{
"description": "Who the project is for.",
"type": "string",
"minLength": 10,
"maxLength": 500
},
{
"type": "null"
}
]
},
"not_for": {
"anyOf": [
{
"description": "Who should choose something else.",
"type": "string",
"minLength": 10,
"maxLength": 500
},
{
"type": "null"
}
]
},
"screenshots": {
"anyOf": [
{
"description": "Up to 8 screenshots. We copy them; hosted images must stay public until verification finishes.",
"maxItems": 8,
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string",
"maxLength": 2048,
"description": "Public HTTPS PNG, JPEG, or WebP, max 2 MB."
},
"alt": {
"type": "string",
"minLength": 3,
"maxLength": 200
}
},
"required": [
"url",
"alt"
],
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"video_url": {
"anyOf": [
{
"description": "Public demo video page.",
"type": "string",
"maxLength": 2048
},
{
"type": "null"
}
]
},
"pricing": {
"anyOf": [
{
"type": "object",
"properties": {
"model": {
"type": "string",
"enum": [
"free",
"freemium",
"free_trial",
"paid",
"open_source",
"contact_sales"
]
},
"starting_price": {
"description": "For example: $6/month.",
"type": "string",
"maxLength": 40
},
"free_plan": {
"type": "boolean"
}
},
"required": [
"model"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"platforms": {
"anyOf": [
{
"maxItems": 12,
"type": "array",
"items": {
"type": "string",
"enum": [
"web",
"ios",
"ipados",
"watchos",
"visionos",
"android",
"macos",
"windows",
"linux",
"chrome",
"firefox",
"safari",
"vscode",
"cli",
"api",
"mcp",
"wordpress",
"figma",
"slack",
"other"
]
}
},
{
"type": "null"
}
]
},
"links": {
"anyOf": [
{
"description": "Official profiles and pages of the project.",
"type": "object",
"propertyNames": {
"type": "string",
"enum": [
"x",
"bluesky",
"mastodon",
"linkedin",
"github",
"discord",
"youtube",
"reddit",
"producthunt",
"docs",
"changelog",
"pricing",
"status",
"blog"
]
},
"additionalProperties": {
"type": "string",
"maxLength": 2048
}
},
{
"type": "null"
}
]
},
"mcp_url": {
"anyOf": [
{
"description": "Remote MCP endpoint. We check that it answers initialize.",
"type": "string",
"maxLength": 2048
},
{
"type": "null"
}
]
},
"openapi_url": {
"anyOf": [
{
"type": "string",
"maxLength": 2048
},
{
"type": "null"
}
]
},
"app_store_url": {
"anyOf": [
{
"type": "string",
"maxLength": 2048
},
{
"type": "null"
}
]
},
"play_store_url": {
"anyOf": [
{
"type": "string",
"maxLength": 2048
},
{
"type": "null"
}
]
},
"alternatives": {
"anyOf": [
{
"description": "Websites of similar products.",
"maxItems": 5,
"type": "array",
"items": {
"type": "string",
"maxLength": 2048
}
},
{
"type": "null"
}
]
},
"faq": {
"anyOf": [
{
"description": "Answer the faq_questions from get_submission, or your own. Answers must match the website.",
"maxItems": 10,
"type": "array",
"items": {
"type": "object",
"properties": {
"question": {
"type": "string",
"minLength": 5,
"maxLength": 200
},
"answer": {
"type": "string",
"minLength": 20,
"maxLength": 1000
}
},
"required": [
"question",
"answer"
],
"additionalProperties": false
}
},
{
"type": "null"
}
]
},
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"control_token": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
},
"required": [
"id"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢list_projects(query, category, tag, page)
Browse published projects only. Use page to read more results.
输入模式
{
"type": "object",
"properties": {
"query": {
"type": "string",
"maxLength": 120
},
"category": {
"type": "string"
},
"tag": {
"type": "string"
},
"page": {
"default": 1,
"type": "integer",
"minimum": 1,
"maximum": 10000
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_project(slug)
Read one published listing by slug or listing ID: description, FAQ, pricing, platforms, links, screenshots, verified store and GitHub data, and passed agent-readiness checks.
输入模式
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"minLength": 1,
"maxLength": 120
}
},
"required": [
"slug"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_categories
List every valid category ID, name, and alias. Choose one primary category.
输入模式
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_tags
List all valid tag IDs, names, and aliases. Submit suggestions as comma-separated values.
输入模式
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_taxonomy
Read valid category and tag IDs.
输入模式
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡recover_submission(id, recovery_id)
Recover a lost control token by proving website control. First omit recovery_id, save the new token, and install the returned file. Then call again with recovery_id. Never share tokens publicly.
输入模式
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"recovery_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"required": [
"id"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_badge(id)
Get the public badge snippet for any submission. No control token required. Installing it on the submitted website proves control.
输入模式
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"required": [
"id"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}⚪purchase_badge_waiver(id, method)
Anyone may pay the $4.99 badge waiver for an eligible submission after website and content verification. No submission control token is needed. Use checkout for a hosted Managed Checkout link. Use mpp with an authorized MPP payment client for a direct payment sold by submitby.ai, outside Managed Payments. When MPP is disabled, Managed Checkout remains available. Never ask for card details in chat.
输入模式
{
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"method": {
"default": "checkout",
"type": "string",
"enum": [
"mpp",
"checkout"
]
}
},
"required": [
"id"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}社区
证据