Serveur MCP

submitby.ai

io.github.Elijen/submitbyai
Outils développeur Marketing et publicité Public et accessible MCP 2025-11-25

Ce que fait ce MCP

Submits, verifies, updates, and browses software directory listings, including taxonomy, tags, project details, and agent-readiness information.

get_badge
Get the public badge snippet for any submission. No control token required. Installing it on the submitted website proves control.
Lecture seule
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id'], '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)$'}}}
get_project
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.
Lecture seule
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'maxLength': 120, 'minLength': 1}}}
get_submission
Read private status, listing completeness, suggested faq_questions, the private agent-readiness report, and exact next actions.
Lecture seule
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id'], '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}$'}}}
get_taxonomy
Read valid category and tag IDs.
Lecture seule
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
list_categories
List every valid category ID, name, and alias. Choose one primary category.
Lecture seule
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
list_projects
Browse published projects only. Use page to read more results.
Lecture seule
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'tag': {'type': 'string'}, 'page': {'type': 'integer', 'default': 1, 'maximum': 10000, 'minimum': 1}, 'query': {'type': 'string', 'maxLength': 120}, 'category': {'type': 'string'}}}
list_tags
List all valid tag IDs, names, and aliases. Submit suggestions as comma-separated values.
Lecture seule
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
purchase_badge_waiver
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.
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id'], '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': {'enum': ['mpp', 'checkout'], 'type': 'string', 'default': 'checkout'}}}
recover_submission
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.
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id'], '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)$'}}}
submit_project
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.
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['url', 'name', 'idempotency_key'], 'properties': {'faq': {'type': 'array', 'items': {'type': 'object', 'required': ['question', 'answer'], 'properties': {'answer': {'type': 'string', 'maxLength': 1000, 'minLength': 20}, 'question': {'type': 'string', 'maxLength': 200, 'minLength': 5}}, 'additionalProperties': False}, 'maxItems': 10, 'description': 'Answer the faq_questions from get_submission, or your own. Answers must match the website.'}, 'url': {'type': 'string', 'maxLength': 2048}, 'name': {'type': 'string', 'maxLength': 80, 'minLength': 2}, 'tags': {'type': 'string', 'maxLength': 1500}, 'links': {'type': 'object', 'description': 'Official profiles and pages of the project.', 'propertyNames': {'enum': ['x', 'bluesky', 'mastodon', 'linkedin', 'github', 'discord', 'youtube', 'reddit', 'producthunt', 'docs', 'changelog', 'pricing', 'status', 'blog'], 'type': 'string'}, 'additionalProperties': {'type': 'string', 'maxLength': 2048}}, 'route': {'enum': ['badge', 'paid'], 'type': 'string', 'default': 'badge'}, 'mcp_url': {'type': 'string', 'maxLength': 2048, 'description': 'Remote MCP endpoint. We check that it answers initialize.'}, 'not_for': {'type': 'string', 'maxLength': 500, 'minLength': 10, 'description': 'Who should choose something else.'}, 'pricing': {'type': 'object', 'required': ['model'], 'properties': {'model': {'enum': ['free', 'freemium', 'free_trial', 'paid', 'open_source', 'contact_sales'], 'type': 'string'}, 'free_plan': {'type': 'boolean'}, 'starting_price': {'type': 'string', 'maxLength': 40, 'description': 'For example: $6/month.'}}, 'additionalProperties': False}, 'tagline': {'type': 'string', 'maxLength': 100, 'minLength': 10, 'description': 'One line, in your own words. Shown on cards.'}, 'audience': {'type': 'string', 'maxLength': 500, 'minLength': 10, 'description': 'Who the project is for.'}, 'category': {'type': 'string', 'maxLength': 100}, 'icon_url': {'anyOf': [{'type': 'string', 'maxLength': 2048, 'minLength': 1}, {'type': 'null'}], 'description': 'Optional public HTTPS icon URL. Omit or set null to discover the first Apple touch icon, then the favicon.'}, 'platforms': {'type': 'array', 'items': {'enum': ['web', 'ios', 'ipados', 'watchos', 'visionos', 'android', 'macos', 'windows', 'linux', 'chrome', 'firefox', 'safari', 'vscode', 'cli', 'api', 'mcp', 'wordpress', 'figma', 'slack', 'other'], 'type': 'string'}, 'maxItems': 12}, 'video_url': {'type': 'string', 'maxLength': 2048, 'description': 'Public demo video page.'}, 'description': {'type': 'string', 'default': '', 'maxLength': 500}, 'openapi_url': {'type': 'string', 'maxLength': 2048}, 'screenshots': {'type': 'array', 'items': {'type': 'object', 'required': ['url', 'alt'], 'properties': {'alt': {'type': 'string', 'maxLength': 200, 'minLength': 3}, 'url': {'type': 'string', 'maxLength': 2048, 'description': 'Public HTTPS PNG, JPEG, or WebP, max 2 MB.'}}, 'additionalProperties': False}, 'maxItems': 8, 'description': 'Up to 8 screenshots. We copy them; hosted images must stay public until verification finishes.'}, 'alternatives': {'type': 'array', 'items': {'type': 'string', 'maxLength': 2048}, 'maxItems': 5, 'description': 'Websites of similar products.'}, 'app_store_url': {'type': 'string', 'maxLength': 2048}, 'play_store_url': {'type': 'string', 'maxLength': 2048}, 'idempotency_key': {'type': 'string', 'maxLength': 128, 'minLength': 32}, 'long_description': {'type': 'string', 'maxLength': 6000, 'minLength': 300, '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.'}}, 'additionalProperties': False}
update_submission
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.
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id'], '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)$'}, 'faq': {'anyOf': [{'type': 'array', 'items': {'type': 'object', 'required': ['question', 'answer'], 'properties': {'answer': {'type': 'string', 'maxLength': 1000, 'minLength': 20}, 'question': {'type': 'string', 'maxLength': 200, 'minLength': 5}}, 'additionalProperties': False}, 'maxItems': 10, 'description': 'Answer the faq_questions from get_submission, or your own. Answers must match the website.'}, {'type': 'null'}]}, 'name': {'type': 'string', 'maxLength': 80, 'minLength': 2}, 'tags': {'type': 'string', 'maxLength': 1500}, 'links': {'anyOf': [{'type': 'object', 'description': 'Official profiles and pages of the project.', 'propertyNames': {'enum': ['x', 'bluesky', 'mastodon', 'linkedin', 'github', 'discord', 'youtube', 'reddit', 'producthunt', 'docs', 'changelog', 'pricing', 'status', 'blog'], 'type': 'string'}, 'additionalProperties': {'type': 'string', 'maxLength': 2048}}, {'type': 'null'}]}, 'route': {'enum': ['badge', 'paid'], 'type': 'string', 'default': 'badge'}, 'mcp_url': {'anyOf': [{'type': 'string', 'maxLength': 2048, 'description': 'Remote MCP endpoint. We check that it answers initialize.'}, {'type': 'null'}]}, 'not_for': {'anyOf': [{'type': 'string', 'maxLength': 500, 'minLength': 10, 'description': 'Who should choose something else.'}, {'type': 'null'}]}, 'pricing': {'anyOf': [{'type': 'object', 'required': ['model'], 'properties': {'model': {'enum': ['free', 'freemium', 'free_trial', 'paid', 'open_source', 'contact_sales'], 'type': 'string'}, 'free_plan': {'type': 'boolean'}, 'starting_price': {'type': 'string', 'maxLength': 40, 'description': 'For example: $6/month.'}}, 'additionalProperties': False}, {'type': 'null'}]}, 'tagline': {'anyOf': [{'type': 'string', 'maxLength': 100, 'minLength': 10, 'description': 'One line, in your own words. Shown on cards.'}, {'type': 'null'}]}, 'audience': {'anyOf': [{'type': 'string', 'maxLength': 500, 'minLength': 10, 'description': 'Who the project is for.'}, {'type': 'null'}]}, 'category': {'type': 'string', 'maxLength': 100}, 'icon_url': {'anyOf': [{'type': 'string', 'maxLength': 2048, 'minLength': 1}, {'type': 'null'}], 'description': 'Optional public HTTPS icon URL. Omit or set null to discover the first Apple touch icon, then the favicon.'}, 'platforms': {'anyOf': [{'type': 'array', 'items': {'enum': ['web', 'ios', 'ipados', 'watchos', 'visionos', 'android', 'macos', 'windows', 'linux', 'chrome', 'firefox', 'safari', 'vscode', 'cli', 'api', 'mcp', 'wordpress', 'figma', 'slack', 'other'], 'type': 'string'}, 'maxItems': 12}, {'type': 'null'}]}, 'video_url': {'anyOf': [{'type': 'string', 'maxLength': 2048, 'description': 'Public demo video page.'}, {'type': 'null'}]}, 'description': {'type': 'string', 'default': '', 'maxLength': 500}, 'openapi_url': {'anyOf': [{'type': 'string', 'maxLength': 2048}, {'type': 'null'}]}, 'screenshots': {'anyOf': [{'type': 'array', 'items': {'type': 'object', 'required': ['url', 'alt'], 'properties': {'alt': {'type': 'string', 'maxLength': 200, 'minLength': 3}, 'url': {'type': 'string', 'maxLength': 2048, 'description': 'Public HTTPS PNG, JPEG, or WebP, max 2 MB.'}}, 'additionalProperties': False}, 'maxItems': 8, 'description': 'Up to 8 screenshots. We copy them; hosted images must stay public until verification finishes.'}, {'type': 'null'}]}, 'alternatives': {'anyOf': [{'type': 'array', 'items': {'type': 'string', 'maxLength': 2048}, 'maxItems': 5, 'description': 'Websites of similar products.'}, {'type': 'null'}]}, 'app_store_url': {'anyOf': [{'type': 'string', 'maxLength': 2048}, {'type': 'null'}]}, 'control_token': {'type': 'string', 'pattern': '^[a-f0-9]{64}$'}, 'play_store_url': {'anyOf': [{'type': 'string', 'maxLength': 2048}, {'type': 'null'}]}, 'long_description': {'anyOf': [{'type': 'string', 'maxLength': 6000, 'minLength': 300, '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': 'null'}]}}, 'additionalProperties': False}
verify_submission
Request website and badge verification. Call after installing the returned snippet or file.
Schéma d’entrée
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id'], '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}$'}}}
Ajouté
purchase_badge_waiver
4 October 2026 02:40
Ajouté
get_badge
4 October 2026 02:40
Ajouté
recover_submission
4 October 2026 02:40
Ajouté
get_taxonomy
4 October 2026 02:40
Ajouté
list_tags
4 October 2026 02:40
Ajouté
list_categories
4 October 2026 02:40
Ajouté
get_project
4 October 2026 02:40
Ajouté
list_projects
4 October 2026 02:40
Ajouté
update_submission
4 October 2026 02:40
Ajouté
verify_submission
4 October 2026 02:40
Ajouté
get_submission
4 October 2026 02:40
Ajouté
submit_project
4 October 2026 02:40