Skip to main content
๐Ÿ’ปโšก๐Ÿ—„๏ธ๐Ÿ–ฅ๏ธ๐Ÿ”’mcpSource: mcp.platphormnews.comdevelopers

PlatphormNews MCP Platform API

MCP Server with 71 tools, 16 resources, and 23 prompts for platform news management, site registry (84+ sites), GitHub integration, Product Hunt, federation, network discovery, auto-discovery, DynamoDB persistence, and cross-site MCP proxy.

30 min read5,833 words

{ "name": "PlatphormNews MCP Platform API", "version": "0.1.0", "description": "MCP Server with 71 tools, 16 resources, and 23 prompts for platform news management, site registry (84+ sites), GitHub integration, Product Hunt, federation, network discovery, auto-discovery, DynamoDB persistence, and cross-site MCP proxy.", "protocolVersion": "2024-11-05", "transport": "streamable-http", "stats": { "tools": 71, "resources": 16, "prompts": 23 }, "tools": [ { "name": "getnetworkinfo", "description": "Get metadata about the PlatPhorm News network: owner, orgs, verticals, stats, and MCP hub info. Always available (no database dependency).", "inputSchema": { "type": "object", "properties": {} } }, { "name": "networkstatus", "description": "Check the status of the entire PlatPhorm News network or specific sites.", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string" } } } }, { "name": "getnetworksites", "description": "List all known sites in the PlatPhorm News network (.platphormnews.com, .ph3ar.com). Returns hardcoded registry โ€” always available.", "inputSchema": { "type": "object", "properties": { "vertical": { "type": "string" }, "mcpOnly": { "type": "boolean" }, "withApiDocs": { "type": "boolean" } } } }, { "name": "getnetworkmcpservers", "description": "List all MCP-enabled servers in the PlatPhorm News federation. Always available (hardcoded + optional Redis overlay).", "inputSchema": { "type": "object", "properties": {} } }, { "name": "resolvenetworkdomain", "description": "Resolve any .platphormnews.com or .ph3ar.com domain to its site data. Falls back to hardcoded registry if Redis is unavailable.", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain to resolve (e.g. ascii.platphormnews.com)" } }, "required": [ "domain" ] } }, { "name": "fetchnetworksitemap", "description": "Fetch and parse platphormnews.com/sitemap-main.xml to discover all URLs across the network. Returns structured sitemap data with lastmod, changefreq, and priority.", "inputSchema": { "type": "object", "properties": { "sitemapUrl": { "type": "string" }, "headers": { "type": "object", "additionalProperties": true }, "timeout": { "type": "number" }, "maxRetries": { "type": "number" } } } }, { "name": "discoversiteapi", "description": "Fetch /api/docs from any .platphormnews.com site to discover its available API endpoints, tools, and capabilities. Supports quake.platphormnews.com, calendar.platphormnews.com, ascii.platphormnews.com, and any other network site with API docs.", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain or URL of the site (e.g. quake.platphormnews.com or https://calendar.platphormnews.com)" }, "headers": { "type": "object", "additionalProperties": true }, "timeout": { "type": "number" }, "maxRetries": { "type": "number" } }, "required": [ "domain" ] } }, { "name": "getsitehealth", "description": "Fetch /api/health from any network site to check its current status, uptime, and capabilities. Works with any .platphormnews.com or .ph3ar.com site.", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain to health-check (e.g. quake.platphormnews.com)" }, "headers": { "type": "object", "additionalProperties": true }, "timeout": { "type": "number" }, "maxRetries": { "type": "number" } }, "required": [ "domain" ] } }, { "name": "listarticles", "description": "List articles with pagination and optional filtering by category, tag, or status.", "inputSchema": { "type": "object", "properties": { "page": { "type": "number" }, "limit": { "type": "number" }, "category": { "type": "string" }, "tag": { "type": "string" }, "status": { "type": "string", "enum": [ "draft", "published", "archived" ] } } } }, { "name": "getarticle", "description": "Get a single article by ID or slug. Returns full content and increments view counter.", "inputSchema": { "type": "object", "properties": { "id": { "type": "string" }, "slug": { "type": "string" } } } }, { "name": "createarticle", "description": "Create a new article. Slug auto-generated from title. Defaults to draft.", "inputSchema": { "type": "object", "properties": { "title": { "type": "string", "description": "Article title" }, "content": { "type": "string", "description": "Article body (markdown)" }, "excerpt": { "type": "string", "description": "Short excerpt" }, "author": { "type": "string", "description": "Author name" }, "category": { "type": "string", "description": "Category slug" }, "tags": { "type": "array", "items": { "type": "string" } }, "status": { "type": "string", "enum": [ "draft", "published" ] } }, "required": [ "title", "content", "excerpt", "author", "category" ] } }, { "name": "updatearticle", "description": "Update an existing article by ID. Only provided fields are changed.", "inputSchema": { "type": "object", "properties": { "id": { "type": "string", "description": "Article ID to update" }, "title": { "type": "string" }, "content": { "type": "string" }, "excerpt": { "type": "string" }, "author": { "type": "string" }, "category": { "type": "string" }, "tags": { "type": "array", "items": { "type": "string" } } }, "required": [ "id" ] } }, { "name": "deletearticle", "description": "Soft-delete an article by archiving it.", "inputSchema": { "type": "object", "properties": { "id": { "type": "string", "description": "Article ID to archive" } }, "required": [ "id" ] } }, { "name": "publisharticle", "description": "Publish a draft article and record the publish timestamp.", "inputSchema": { "type": "object", "properties": { "id": { "type": "string", "description": "Article ID to publish" } }, "required": [ "id" ] } }, { "name": "listcategories", "description": "List all content categories.", "inputSchema": { "type": "object", "properties": {} } }, { "name": "createcategory", "description": "Create a new content category. Slug auto-generated from name.", "inputSchema": { "type": "object", "properties": { "name": { "type": "string", "description": "Category display name" }, "description": { "type": "string", "description": "Category description" } }, "required": [ "name", "description" ] } }, { "name": "updatecategory", "description": "Update an existing category by ID.", "inputSchema": { "type": "object", "properties": { "id": { "type": "string", "description": "Category ID" }, "name": { "type": "string" }, "description": { "type": "string" } }, "required": [ "id" ] } }, { "name": "deletecategory", "description": "Delete a category by ID.", "inputSchema": { "type": "object", "properties": { "id": { "type": "string", "description": "Category ID" } }, "required": [ "id" ] } }, { "name": "listfaqs", "description": "List all FAQs, optionally filtered by category.", "inputSchema": { "type": "object", "properties": { "category": { "type": "string" } } } }, { "name": "createfaq", "description": "Create a new FAQ entry.", "inputSchema": { "type": "object", "properties": { "question": { "type": "string", "description": "The FAQ question" }, "answer": { "type": "string", "description": "The FAQ answer" }, "category": { "type": "string", "description": "FAQ category" }, "order": { "type": "number", "description": "Display order (lower = first)" } }, "required": [ "question", "answer", "category", "order" ] } }, { "name": "updatefaq", "description": "Update an existing FAQ entry by ID.", "inputSchema": { "type": "object", "properties": { "id": { "type": "string", "description": "FAQ ID" }, "question": { "type": "string" }, "answer": { "type": "string" }, "category": { "type": "string" }, "order": { "type": "number" } }, "required": [ "id" ] } }, { "name": "deletefaq", "description": "Permanently delete an FAQ entry by ID.", "inputSchema": { "type": "object", "properties": { "id": { "type": "string", "description": "FAQ ID" } }, "required": [ "id" ] } }, { "name": "searcharticles", "description": "Full-text search across articles by title, content, excerpt, and tags.", "inputSchema": { "type": "object", "properties": { "query": { "type": "string", "description": "Search query string" }, "limit": { "type": "number" } }, "required": [ "query" ] } }, { "name": "getanalytics", "description": "Get view counts for a specific article or trending articles across the platform.", "inputSchema": { "type": "object", "properties": { "articleId": { "type": "string" }, "trendingLimit": { "type": "number" } } } }, { "name": "listorgrepos", "description": "List repositories for a GitHub org (mbarbine, process-co, ph3ar).", "inputSchema": { "type": "object", "properties": { "org": { "type": "string", "enum": [ "mbarbine", "process-co", "ph3ar" ], "description": "GitHub org" }, "sort": { "type": "string", "enum": [ "updated", "created", "pushed", "fullname" ] }, "perpage": { "type": "number" }, "page": { "type": "number" }, "includearchived": { "type": "boolean" } }, "required": [ "org" ] } }, { "name": "getrepodetails", "description": "Get detailed info about a specific repo including README, languages, contributors.", "inputSchema": { "type": "object", "properties": { "owner": { "type": "string", "description": "Repo owner" }, "repo": { "type": "string", "description": "Repo name" }, "includereadme": { "type": "boolean" }, "includecontributors": { "type": "boolean" } }, "required": [ "owner", "repo" ] } }, { "name": "getorginfo", "description": "Get profile info for a supported GitHub org (mbarbine, process-co, ph3ar).", "inputSchema": { "type": "object", "properties": { "org": { "type": "string", "enum": [ "mbarbine", "process-co", "ph3ar" ], "description": "GitHub org" } }, "required": [ "org" ] } }, { "name": "searchorgcode", "description": "Search code across supported orgs (mbarbine, process-co, ph3ar). Requires GITHUBTOKEN.", "inputSchema": { "type": "object", "properties": { "query": { "type": "string", "description": "Code search query" }, "org": { "type": "string", "enum": [ "mbarbine", "process-co", "ph3ar" ], "description": "Org to search" }, "language": { "type": "string" }, "perpage": { "type": "number" } }, "required": [ "query", "org" ] } }, { "name": "gettrendingrepos", "description": "Get trending repos on GitHub by recent stars. Useful for discovering popular projects.", "inputSchema": { "type": "object", "properties": { "language": { "type": "string" }, "since": { "type": "string", "enum": [ "daily", "weekly", "monthly" ] }, "perpage": { "type": "number" } } } }, { "name": "listsites", "description": "List all registered sites in the platform registry with optional vertical filter.", "inputSchema": { "type": "object", "properties": { "vertical": { "type": "string" } } } }, { "name": "getsite", "description": "Get site metadata by ID or domain. Returns full site record including aliases and MCP config.", "inputSchema": { "type": "object", "properties": { "id": { "type": "string" }, "domain": { "type": "string" } } } }, { "name": "registersite", "description": "Register a new Vercel-hosted site in the platform inventory.", "inputSchema": { "type": "object", "properties": { "name": { "type": "string", "description": "Site display name" }, "domain": { "type": "string", "description": "Primary domain" }, "aliases": { "type": "array", "items": { "type": "string" } }, "vertical": { "type": "string", "description": "Vertical category" }, "description": { "type": "string", "description": "Site description" }, "mcpEnabled": { "type": "boolean" }, "mcpUrl": { "type": "string" } }, "required": [ "name", "domain", "vertical", "description" ] } }, { "name": "generatesitetoken", "description": "Generate a secure bearer token for a site to authenticate future MCP requests.", "inputSchema": { "type": "object", "properties": { "siteId": { "type": "string", "description": "Site ID" }, "ttlDays": { "type": "number" } }, "required": [ "siteId" ] } }, { "name": "registercapability", "description": "Register a tool, resource, or prompt capability for a site.", "inputSchema": { "type": "object", "properties": { "siteId": { "type": "string", "description": "Site ID" }, "type": { "type": "string", "enum": [ "tool", "resource", "prompt" ], "description": "Capability type" }, "name": { "type": "string", "description": "Capability name" }, "description": { "type": "string", "description": "What this capability does" }, "schema": { "type": "object", "additionalProperties": true }, "exampleUsage": { "type": "string" } }, "required": [ "siteId", "type", "name", "description" ] } }, { "name": "updatesite", "description": "Update site metadata for a registered site.", "inputSchema": { "type": "object", "properties": { "id": { "type": "string", "description": "Site ID to update" }, "name": { "type": "string" }, "description": { "type": "string" }, "status": { "type": "string", "enum": [ "active", "inactive", "maintenance" ] }, "mcpEnabled": { "type": "boolean" }, "mcpUrl": { "type": "string" } }, "required": [ "id" ] } }, { "name": "resolvedomain", "description": "Resolve any domain or subdomain to its canonical site record.", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Domain to resolve" } }, "required": [ "domain" ] } }, { "name": "listsitedomains", "description": "List all domain aliases for a given site.", "inputSchema": { "type": "object", "properties": { "id": { "type": "string", "description": "Site ID" } }, "required": [ "id" ] } }, { "name": "syncsitemap", "description": "Sync a site's sitemap by appending its URL to a GitHub repository.", "inputSchema": { "type": "object", "properties": { "siteId": { "type": "string", "description": "Site ID" }, "owner": { "type": "string", "description": "GitHub owner/org" }, "repo": { "type": "string", "description": "GitHub repo name" }, "path": { "type": "string" } }, "required": [ "siteId", "owner", "repo" ] } }, { "name": "crawlsitecapabilities", "description": "Crawl and index tools, resources, and prompts from all MCP-enabled sites in the network.", "inputSchema": { "type": "object", "properties": { "siteId": { "type": "string" } } } }, { "name": "validatesitemcp", "description": "Live health check of a site's MCP endpoint. Verifies protocol compatibility and tool availability.", "inputSchema": { "type": "object", "properties": { "siteId": { "type": "string", "description": "Site ID to validate" } }, "required": [ "siteId" ] } }, { "name": "listevents", "description": "List recent platform events from the outbox with optional type filter.", "inputSchema": { "type": "object", "properties": { "limit": { "type": "number" }, "type": { "type": "string" } } } }, { "name": "getaudittrail", "description": "Get the audit trail for a specific site, showing all write operations with timestamps and changes.", "inputSchema": { "type": "object", "properties": { "siteId": { "type": "string" }, "limit": { "type": "number" } } } }, { "name": "emitevent", "description": "Emit a platform event to the outbox for downstream consumers.", "inputSchema": { "type": "object", "properties": { "type": { "type": "string", "description": "Event type (e.g. site.created, article.published)" }, "source": { "type": "string", "description": "Event source (e.g. mcp-server, api)" }, "data": { "type": "object", "additionalProperties": true, "description": "Event payload data" } }, "required": [ "type", "source", "data" ] } }, { "name": "listdeployments", "description": "List recent deployments, optionally scoped to a specific site.", "inputSchema": { "type": "object", "properties": { "siteId": { "type": "string" }, "limit": { "type": "number" } } } }, { "name": "recorddeployment", "description": "Record a new deployment event. Writes audit log and emits an event to the outbox.", "inputSchema": { "type": "object", "properties": { "siteId": { "type": "string", "description": "Site ID being deployed" }, "url": { "type": "string", "description": "Deployment URL" }, "status": { "type": "string", "enum": [ "building", "ready", "error", "canceled" ], "description": "Deploy status" }, "gitRef": { "type": "string" }, "commitMessage": { "type": "string" } }, "required": [ "siteId", "url", "status" ] } }, { "name": "getdeployment", "description": "Get deployment details by ID.", "inputSchema": { "type": "object", "properties": { "id": { "type": "string", "description": "Deployment ID" } }, "required": [ "id" ] } }, { "name": "searchallsites", "description": "Cross-site full-text search across all registered sites. Currently searches the local content store; will extend to federate across MCP-enabled remote sites.", "inputSchema": { "type": "object", "properties": { "query": { "type": "string", "description": "Search query" }, "limit": { "type": "number" } }, "required": [ "query" ] } }, { "name": "aggregateanalytics", "description": "Roll up analytics (view counts, trending articles) across the platform.", "inputSchema": { "type": "object", "properties": { "trendingLimit": { "type": "number" } } } }, { "name": "getplatformstats", "description": "Get platform-wide statistics: total sites, articles, deployments, events, and audit entries.", "inputSchema": { "type": "object", "properties": {} } }, { "name": "searchproducthunt", "description": "Search Product Hunt posts by topic/keyword. Requires PRODUCTHUNTTOKEN env var.", "inputSchema": { "type": "object", "properties": { "query": { "type": "string", "description": "Search query or topic" }, "first": { "type": "number" } }, "required": [ "query" ] } }, { "name": "getproducthuntpost", "description": "Get details of a specific Product Hunt post by ID.", "inputSchema": { "type": "object", "properties": { "id": { "type": "string", "description": "Product Hunt post ID" } }, "required": [ "id" ] } }, { "name": "trendingproducthunt", "description": "Get today's trending Product Hunt launches sorted by votes.", "inputSchema": { "type": "object", "properties": { "first": { "type": "number" } } } }, { "name": "listmcpservers", "description": "List all known MCP servers across the platform, including status and endpoints.", "inputSchema": { "type": "object", "properties": {} } }, { "name": "proxymcpcall", "description": "Call a tool on a remote MCP server. Enables cross-subdomain MCP federation (e.g. mcp.platphormnews.com -> mcp.ph3ar.com).", "inputSchema": { "type": "object", "properties": { "server": { "type": "string", "description": "Target MCP server name (from listmcpservers)" }, "tool": { "type": "string", "description": "Tool name to call on remote server" }, "args": { "type": "object", "additionalProperties": true } }, "required": [ "server", "tool" ] } }, { "name": "trackevent", "description": "Track a custom platform event for orchestration and analytics.", "inputSchema": { "type": "object", "properties": { "type": { "type": "string", "description": "Event type (e.g. toolinvocation, siteregistration, error)" }, "source": { "type": "string", "description": "Source of the event (e.g. siteid, userid)" }, "data": { "type": "object", "additionalProperties": true, "description": "Event payload" } }, "required": [ "type", "source", "data" ] } }, { "name": "listrecentevents", "description": "List recent platform events with optional type filtering.", "inputSchema": { "type": "object", "properties": { "type": { "type": "string" }, "limit": { "type": "number" } } } }, { "name": "listneoninfrastructure", "description": "List all Neon serverless Postgres projects and their status.", "inputSchema": { "type": "object", "properties": {} } }, { "name": "listrenderinfrastructure", "description": "List all Render services (web services, crons, DBs) and their live status.", "inputSchema": { "type": "object", "properties": {} } }, { "name": "listvercelinfrastructure", "description": "List all Vercel projects and their basic metadata.", "inputSchema": { "type": "object", "properties": { "teamId": { "type": "string" } } } }, { "name": "getvercelprojectdetails", "description": "Get detailed information and domains for a specific Vercel project.", "inputSchema": { "type": "object", "properties": { "projectId": { "type": "string", "description": "Vercel project ID or name" }, "teamId": { "type": "string" } }, "required": [ "projectId" ] } }, { "name": "searchcapabilitygraph", "description": "Search across the global inventory of tools, resources, and prompts. Provides proxy call instructions.", "inputSchema": { "type": "object", "properties": { "query": { "type": "string", "description": "Search term for tool names or descriptions" } }, "required": [ "query" ] } }, { "name": "getsubdomainorchestrationprofile", "description": "Get a unified profile for a subdomain: registry info, capabilities, and infrastructure links.", "inputSchema": { "type": "object", "properties": { "domain": { "type": "string", "description": "Subdomain to profile (e.g. fashion.platphormnews.com)" } }, "required": [ "domain" ] } }, { "name": "getnetworkhealthsummary", "description": "Provides a high-level orchestration health summary for the entire network. Ideal for monitor dashboards.", "inputSchema": { "type": "object", "properties": {} } }, { "name": "getquakestats", "description": "Get live server statistics and player counts for quake.platphormnews.com.", "inputSchema": { "type": "object", "properties": {} } }, { "name": "searchplatformjobs", "description": "Search for job openings across the PlatphormNews network.", "inputSchema": { "type": "object", "properties": { "query": { "type": "string" } } } }, { "name": "getfashiontrends", "description": "Fetch AI-analyzed fashion trends for fashion.platphormnews.com.", "inputSchema": { "type": "object", "properties": {} } }, { "name": "dynamolistsites", "description": "List all registered sites from DynamoDB (source of truth for 84+ sites). Supports vertical filtering. Returns full site metadata including domains, MCP status, and API docs URLs. Used by monitor.platphormnews.com.", "inputSchema": { "type": "object", "properties": { "vertical": { "type": "string" }, "limit": { "type": "number" } } } }, { "name": "dynamogetsite", "description": "Get a single site from DynamoDB by siteId or domain. Returns full metadata, MCP configuration, aliases, and status. Falls back to resolvenetworkdomain if DynamoDB is unavailable.", "inputSchema": { "type": "object", "properties": { "siteId": { "type": "string" }, "domain": { "type": "string" } } } }, { "name": "dynamolistarticles", "description": "List articles from DynamoDB by site or category. Returns article metadata (title, slug, excerpt, author, status, dates). Use for cross-site content queries and monitor dashboards.", "inputSchema": { "type": "object", "properties": { "siteId": { "type": "string" }, "category": { "type": "string" }, "limit": { "type": "number" } } } }, { "name": "dynamolistevents", "description": "List platform events from DynamoDB โ€” deployment notifications, content changes, audit entries. Supports filtering by event type and status. Essential for monitor.platphormnews.com dashboards.", "inputSchema": { "type": "object", "properties": { "type": { "type": "string" }, "status": { "type": "string", "enum": [ "pending", "delivered", "failed" ] }, "limit": { "type": "number" } } } }, { "name": "dynamotableinfo", "description": "Get DynamoDB table health and connectivity status. Returns table name, region, connection status, and latency. Used by monitor.platphormnews.com for infrastructure monitoring.", "inputSchema": { "type": "object", "properties": {} } } ], "toolsByCategory": { "network": [ "getnetworkinfo", "getnetworksites", "getnetworkmcpservers", "resolvenetworkdomain", "fetchnetworksitemap", "discoversiteapi", "getnetworkhealthsummary" ], "other": [ "networkstatus", "resolvedomain", "searchproducthunt", "getproducthuntpost", "trendingproducthunt" ], "sites": [ "getsitehealth", "listsites", "getsite", "registersite", "generatesitetoken", "registercapability", "updatesite", "listsitedomains", "syncsitemap", "crawlsitecapabilities", "validatesitemcp" ], "content": [ "listarticles", "getarticle", "createarticle", "updatearticle", "deletearticle", "publisharticle", "searcharticles" ], "categories": [ "listcategories", "createcategory", "updatecategory", "deletecategory" ], "faqs": [ "listfaqs", "createfaq", "updatefaq", "deletefaq" ], "search": [ "getanalytics" ], "github": [ "listorgrepos", "getrepodetails", "getorginfo", "searchorgcode", "gettrendingrepos" ], "events": [ "listevents", "getaudittrail", "emitevent" ], "deployments": [ "listdeployments", "recorddeployment", "getdeployment" ], "federation": [ "searchallsites", "aggregateanalytics", "getplatformstats" ], "proxy": [ "listmcpservers", "proxymcpcall" ], "analytics": [ "trackevent", "listrecentevents" ], "orchestrator": [ "listneoninfrastructure", "listrenderinfrastructure", "listvercelinfrastructure", "getvercelprojectdetails", "searchcapabilitygraph", "getsubdomainorchestrationprofile" ], "verticals": [ "getquakestats", "searchplatformjobs", "getfashiontrends" ], "dynamodb": [ "dynamolistsites", "dynamogetsite", "dynamolistarticles", "dynamolistevents", "dynamotableinfo" ] }, "resources": [ { "uri": "platphormnews://config", "name": "site-config", "description": "Site configuration: name, description, URL, locales, version.", "mimeType": "application/json" }, { "uri": "platphormnews://articles", "name": "articles-feed", "description": "All published articles as a JSON feed.", "mimeType": "application/json" }, { "uri": "platphormnews://categories", "name": "categories", "description": "All content categories with name, slug, and description.", "mimeType": "application/json" }, { "uri": "platphormnews://faqs", "name": "faqs", "description": "All FAQs with answers, organized by category.", "mimeType": "application/json" }, { "uri": "platphormnews://sites", "name": "sites", "description": "All registered sites in the platform registry.", "mimeType": "application/json" }, { "uri": "platphormnews://events", "name": "events", "description": "Recent platform events from the outbox.", "mimeType": "application/json" }, { "uri": "platphormnews://deployments", "name": "deployments", "description": "Recent deployment records across all sites.", "mimeType": "application/json" }, { "uri": "platphormnews://platform-stats", "name": "platform-stats", "description": "Platform-wide statistics: site count, articles, tools, version.", "mimeType": "application/json" }, { "uri": "platphormnews://domain-map", "name": "domain-map", "description": "Full domain-to-site mapping for all registered sites.", "mimeType": "application/json" }, { "uri": "platphormnews://mcp-servers", "name": "mcp-servers", "description": "All MCP servers in the federation registry.", "mimeType": "application/json" }, { "uri": "platphormnews://audit-trail", "name": "audit-trail", "description": "Recent audit trail entries for all write operations.", "mimeType": "application/json" }, { "uri": "platphormnews://llms", "name": "llms-discovery", "description": "LLM discovery metadata for the platform.", "mimeType": "application/json" }, { "uri": "platphormnews://capabilities", "name": "site-capabilities", "description": "All registered tools, resources, and prompts across the site network.", "mimeType": "application/json" }, { "uri": "platphormnews://health", "name": "network-health", "description": "Unified health status of network subdomains and infrastructure.", "mimeType": "application/json" }, { "uri": "platphormnews://icons/{vertical}", "name": "site-icons", "description": "Dynamic SVG icons generated from Unicode emojis for network branding.", "mimeType": "image/svg+xml" }, { "uri": "platphormnews://system-prompt", "name": "platform-system-prompt", "description": "The ultimate system prompt for an AI agent to orchestrate the network.", "mimeType": "text/markdown" } ], "prompts": [ { "name": "write-article", "description": "Generate a well-structured article on a given topic with SEO optimization", "arguments": [ { "name": "topic", "description": "Article topic or headline", "required": true }, { "name": "tone", "description": "Writing tone (formal, casual, technical)", "required": false }, { "name": "length", "description": "Target word count", "required": false } ] }, { "name": "summarize-article", "description": "Create a concise summary of an article preserving key insights", "arguments": [ { "name": "content", "description": "Article content to summarize", "required": true }, { "name": "format", "description": "Summary format (bullets, paragraph, tldr)", "required": false } ] }, { "name": "generate-faq", "description": "Generate FAQ entries for a topic or product", "arguments": [ { "name": "topic", "description": "Topic to generate FAQs for", "required": true }, { "name": "count", "description": "Number of FAQ items", "required": false } ] }, { "name": "seo-optimize", "description": "Optimize content for search engines", "arguments": [ { "name": "content", "description": "Content to optimize", "required": true }, { "name": "keywords", "description": "Target keywords", "required": false } ] }, { "name": "editorial-review", "description": "Perform editorial review with improvement suggestions", "arguments": [ { "name": "content", "description": "Content to review", "required": true }, { "name": "styleguide", "description": "Style guide to follow", "required": false } ] }, { "name": "network-health-report", "description": "Generate comprehensive network health report", "arguments": [ { "name": "includedetails", "description": "Include detailed metrics", "required": false } ] }, { "name": "cross-site-search", "description": "Search across all network sites", "arguments": [ { "name": "query", "description": "Search query", "required": true }, { "name": "sites", "description": "Specific sites to search", "required": false } ] }, { "name": "site-health-check", "description": "Deep health check for a specific site", "arguments": [ { "name": "domain", "description": "Site domain to check", "required": true } ] }, { "name": "discover-network", "description": "Discover and map the entire network", "arguments": [] }, { "name": "register-new-site", "description": "Register a new site in the network", "arguments": [ { "name": "subdomain", "description": "Site subdomain", "required": true }, { "name": "name", "description": "Display name", "required": true }, { "name": "vertical", "description": "Site vertical/category", "required": true }, { "name": "description", "description": "Site description", "required": true } ] }, { "name": "migration-plan", "description": "Generate migration plan for site updates", "arguments": [ { "name": "site", "description": "Site to migrate", "required": true }, { "name": "changes", "description": "Changes to implement", "required": true } ] }, { "name": "platform-overview", "description": "Generate platform overview report", "arguments": [] }, { "name": "json-format", "description": "Format and validate JSON using json.platphormnews.com", "arguments": [ { "name": "json", "description": "JSON to format", "required": true }, { "name": "indent", "description": "Indentation spaces", "required": false } ] }, { "name": "json-diff", "description": "Compare two JSON documents", "arguments": [ { "name": "json1", "description": "First JSON document", "required": true }, { "name": "json2", "description": "Second JSON document", "required": true } ] }, { "name": "desa-analyze", "description": "Analyze data with desa.platphormnews.com", "arguments": [ { "name": "dataset", "description": "Dataset identifier or URL", "required": true }, { "name": "analysistype", "description": "Type of analysis", "required": true } ] }, { "name": "desa-query", "description": "Query data from DESA", "arguments": [ { "name": "query", "description": "SQL or data query", "required": true } ] }, { "name": "atlas-map", "description": "Create geographic visualizations with atlas.platphormnews.com", "arguments": [ { "name": "data", "description": "Geographic data", "required": true }, { "name": "maptype", "description": "Map type (choropleth, marker, heatmap)", "required": false } ] }, { "name": "atlas-geocode", "description": "Geocode addresses to coordinates", "arguments": [ { "name": "addresses", "description": "Addresses to geocode", "required": true } ] }, { "name": "monitor-status", "description": "Check deployment and service status with monitor.platphormnews.com", "arguments": [ { "name": "service", "description": "Service to check", "required": false } ] }, { "name": "monitor-alerts", "description": "List active alerts and incidents", "arguments": [ { "name": "severity", "description": "Filter by severity", "required": false } ] }, { "name": "ascii-convert", "description": "Convert image to ASCII art", "arguments": [ { "name": "imageurl", "description": "Image URL to convert", "required": true }, { "name": "width", "description": "Output width in characters", "required": false } ] }, { "name": "calendar-schedule", "description": "Schedule an event", "arguments": [ { "name": "title", "description": "Event title", "required": true }, { "name": "datetime", "description": "Event date and time", "required": true }, { "name": "duration", "description": "Duration in minutes", "required": false } ] }, { "name": "quake-stats", "description": "Get gaming statistics from quake.platphormnews.com", "arguments": [ { "name": "server", "description": "Server to query", "required": false } ] } ], "endpoints": { "/api/mcp": { "methods": [ "GET", "HEAD", "POST", "OPTIONS" ], "description": "MCP Streamable HTTP endpoint (JSON-RPC 2.0). POST single or batch requests. GET returns live server info + network topology. HEAD for uptime probes.", "tags": [ "mcp", "core" ], "examples": { "initialize": { "method": "initialize", "params": { "protocolVersion": "2024-11-05" } }, "listTools": { "method": "tools/list" }, "callTool": { "method": "tools/call", "params": { "name": "getnetworksites" } }, "batch": [ { "jsonrpc": "2.0", "id": 1, "method": "tools/list" }, { "jsonrpc": "2.0", "id": 2, "method": "resources/list" } ] }, "headers": { "X-MCP-Server": "platphormnews-mcp/0.1.0", "X-MCP-Version": "2024-11-05", "X-Request-Id": "<uuid>", "Mcp-Session-Id": "<uuid โ€” returned on initialize>" } }, "/api/mcp/capabilities": { "methods": [ "GET" ], "description": "Full live capability list โ€” all tools with schemas, all resources, all prompts, and dynamic site capabilities from Redis.", "tags": [ "mcp", "discovery" ] }, "/api/mcp/register": { "methods": [ "POST", "OPTIONS" ], "description": "Register or update a site in the MCP network. Requires REGISTRATIONSECRET if configured.", "tags": [ "mcp", "registry" ], "body": { "name": "string (required)", "domain": "string (required)", "vertical": "string", "description": "string", "mcpUrl": "string", "capabilities": "array" } }, "/api/mcp/validate": { "methods": [ "POST", "OPTIONS" ], "description": "Validate a remote MCP server โ€” reachability, JSON-RPC handshake, tool/resource/prompt inventory.", "tags": [ "mcp", "validation" ] }, "/api/health": { "methods": [ "GET" ], "description": "Health check: Redis + DynamoDB connectivity, platform stats, uptime.", "tags": [ "infra" ] }, "/api/docs": { "methods": [ "GET" ], "description": "This endpoint โ€” live API documentation with full tool catalog, examples, and integration guides.", "tags": [ "docs" ] }, "/api/ping": { "methods": [ "GET" ], "description": "Minimal liveness probe. Returns { ok: true, ts: <ms> }.", "tags": [ "infra" ] }, "/api/register": { "methods": [ "POST", "OPTIONS" ], "description": "Alias for /api/mcp/register.", "tags": [ "registry" ] }, "/api/v1/discovery": { "methods": [ "GET", "POST", "OPTIONS" ], "description": "Auto-discovery engine for .platphormnews.com. GET ?subdomain=json discovers one site; GET ?action=scan scans all; POST runs full discovery+registration.", "tags": [ "discovery" ], "parameters": { "subdomain": "Discover a specific subdomain", "action": "scan | list | crawl", "domain": "Domain to crawl capabilities from" } }, "/api/v1/test/mcp": { "methods": [ "GET" ], "description": "Integration test runner against live MCP server. Add ?verbose=true for full response payloads.", "tags": [ "testing" ] }, "/api/v1/test/sites": { "methods": [ "GET", "POST", "OPTIONS" ], "description": "Live site testing. GET ?domain=site.platphormnews.com tests one site. POST { domains: [...] } for batch (โ‰ค10 sites).", "tags": [ "testing" ] }, "/.well-known/mcp.json": { "methods": [ "GET" ], "description": "MCP discovery manifest per spec.", "tags": [ "well-known" ] }, "/.well-known/ai-plugin.json": { "methods": [ "GET" ], "description": "OpenAI ChatGPT plugin manifest.", "tags": [ "well-known" ] }, "/.well-known/agents.json": { "methods": [ "GET" ], "description": "AI agent discovery manifest โ€” includes IDE integration configs for Cursor, Windsurf, VS Code, Claude Desktop, and Zed.", "tags": [ "well-known" ] }, "/.well-known/security.txt": { "methods": [ "GET" ], "description": "Security contact info (RFC 9116).", "tags": [ "well-known" ] }, "/api/cron/health-check": { "methods": [ "GET" ], "description": "Cron: network-wide health check (every 10 min). Requires CRONSECRET.", "tags": [ "cron" ] }, "/api/cron/sitemap-sync": { "methods": [ "GET" ], "description": "Cron: sync platphormnews.com/sitemap-main.xml (every 6 h). Requires CRONSECRET.", "tags": [ "cron" ] }, "/api/cron/discovery": { "methods": [ "GET" ], "description": "Cron: auto-discover new .platphormnews.com sites (every hour). Requires CRONSECRET.", "tags": [ "cron" ] }, "/api/cron/maintenance": { "methods": [ "GET" ], "description": "Cron: platform maintenance tasks. Requires CRONSECRET.", "tags": [ "cron" ] }, "/api/webhooks/deploy": { "methods": [ "GET", "POST" ], "description": "Webhook receiver for Vercel deployment notifications.", "tags": [ "webhooks" ] }, "/api/webhooks/vercel": { "methods": [ "POST" ], "description": "Webhook receiver for Vercel platform events.", "tags": [ "webhooks" ] }, "/llms.txt": { "methods": [ "GET" ], "description": "LLM discovery summary.", "tags": [ "llm" ] }, "/llms-full.txt": { "methods": [ "GET" ], "description": "Full LLM specification โ€” all tools with schemas, resources, prompts, connection configs.", "tags": [ "llm" ] }, "/llms-index.json": { "methods": [ "GET" ], "description": "Structured JSON metadata for LLM agent integration.", "tags": [ "llm" ] } }, "network": { "name": "PlatPhorm News Network", "rootSite": "https://platphormnews.com", "mcpHub": "https://mcp.platphormnews.com", "totalSites": 84, "mcpEnabledSites": 12, "mcpServers": [ { "name": "platphormnews-mcp", "url": "https://mcp.platphormnews.com/api/mcp", "status": "active", "description": "Primary hub โ€” PlatPhorm News platform orchestration." }, { "name": "json-mcp", "url": "https://json.platphormnews.com/api/mcp", "status": "active", "description": "JSON Tree โ€” parse, format, validate, diff JSON documents." }, { "name": "desa-mcp", "url": "https://desa.platphormnews.com/api/mcp", "status": "active", "description": "DESA โ€” data engineering and analytics platform." }, { "name": "atlas-mcp", "url": "https://atlas.platphormnews.com/api/mcp", "status": "active", "description": "Atlas โ€” geographic and spatial data platform." }, { "name": "monitor-mcp", "url": "https://monitor.platphormnews.com/api/mcp", "status": "active", "description": "Monitor โ€” network monitoring and health dashboard." }, { "name": "ascii-mcp", "url": "https://ascii.platphormnews.com/api/mcp", "status": "active", "description": "ASCII tools โ€” image to ASCII conversion." }, { "name": "quake-mcp", "url": "https://quake.platphormnews.com/api/mcp", "status": "active", "description": "Gaming โ€” QuakeJS Arena server stats." }, { "name": "calendar-mcp", "url": "https://calendar.platphormnews.com/api/mcp", "status": "active", "description": "Calendar โ€” events and scheduling." }, { "name": "ph3ar-mcp", "url": "https://mcp.ph3ar.com/api/mcp", "status": "active", "description": "PH3AR network โ€” security and AI threat intelligence." } ] }, "security": { "authentication": "none โ€” open API", "cors": "Allowed: .platphormnews.com, .ph3ar.com, localhost (dev)", "cronAuthentication": "Bearer CRONSECRET (HMAC-timing-safe)", "registrationAuthentication": "Bearer REGISTRATIONSECRET (if configured)", "rateLimit": "none โ€” governed by Vercel Edge" }, "examples": { "curl": { "initialize": "curl -X POST https://mcp.platphormnews.com/api/mcp \\\n -H \"Content-Type: application/json\" \\\n -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"initialize\",\"params\":{\"protocolVersion\":\"2024-11-05\",\"capabilities\":{},\"clientInfo\":{\"name\":\"my-client\",\"version\":\"1.0\"}}}'", "listTools": "curl https://mcp.platphormnews.com/api/mcp \\\n -X POST -H \"Content-Type: application/json\" \\\n -d '{\"jsonrpc\":\"2.0\",\"id\":2,\"method\":\"tools/list\"}'", "callTool": "curl -X POST https://mcp.platphormnews.com/api/mcp \\\n -H \"Content-Type: application/json\" \\\n -d '{\"jsonrpc\":\"2.0\",\"id\":3,\"method\":\"tools/call\",\"params\":{\"name\":\"getnetworkinfo\",\"arguments\":{}}}'", "batch": "curl -X POST https://mcp.platphormnews.com/api/mcp \\\n -H \"Content-Type: application/json\" \\\n -d '[{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/list\"},{\"jsonrpc\":\"2.0\",\"id\":2,\"method\":\"resources/list\"}]'" }, "javascript": { "initialize": "const res = await fetch(\"https://mcp.platphormnews.com/api/mcp\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n jsonrpc: \"2.0\", id: 1, method: \"initialize\",\n params: { protocolVersion: \"2024-11-05\", capabilities: {}, clientInfo: { name: \"my-client\", version: \"1.0\" } }\n })\n})\nconst { result } = await res.json()\nconst sessionId = res.headers.get(\"Mcp-Session-Id\")", "callTool": "const res = await fetch(\"https://mcp.platphormnews.com/api/mcp\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\", \"Mcp-Session-Id\": sessionId },\n body: JSON.stringify({\n jsonrpc: \"2.0\", id: 2, method: \"tools/call\",\n params: { name: \"getnetworkinfo\", arguments: {} }\n })\n})\nconst { result } = await res.json()" }, "python": { "initialize": "import httpx, json\n\nclient = httpx.Client()\nresp = client.post(\"https://mcp.platphormnews.com/api/mcp\", json={\n \"jsonrpc\": \"2.0\", \"id\": 1, \"method\": \"initialize\",\n \"params\": {\"protocolVersion\": \"2024-11-05\", \"capabilities\": {}, \"clientInfo\": {\"name\": \"py-client\", \"version\": \"1.0\"}}\n})\nsessionid = resp.headers.get(\"Mcp-Session-Id\")", "callTool": "resp = client.post(\"https://mcp.platphormnews.com/api/mcp\",\n headers={\"Mcp-Session-Id\": sessionid},\n json={\"jsonrpc\": \"2.0\", \"id\": 2, \"method\": \"tools/call\",\n \"params\": {\"name\": \"getnetwork_sites\", \"arguments\": {}}})\nprint(resp.json()[\"result\"])" } }, "jsonrpc": { "version": "2.0", "methods": [ "initialize", "notifications/initialized", "tools/list", "tools/call", "resources/list", "resources/read", "prompts/list", "prompts/get", "ping" ], "errorCodes": { "-32700": "Parse error โ€” invalid JSON", "-32600": "Invalid request", "-32601": "Method not found", "-32602": "Invalid params", "-32603": "Internal server error" }, "batchRequests": "Supported โ€” POST an array of JSON-RPC objects", "sessionManagement": "Mcp-Session-Id header issued on initialize; include in subsequent requests", "tracingHeader": "X-Request-Id UUID emitted on every response" }, "infrastructure": { "vercel": { "crons": [ { "path": "/api/cron/health-check", "schedule": "/10 " }, { "path": "/api/cron/sitemap-sync", "schedule": "0 /6 " }, { "path": "/api/cron/discovery", "schedule": "0 " } ], "webhooks": [ "deploy", "vercel" ], "analytics": true, "edge": "middleware" }, "redis": "Upstash Redis โ€” site registry, event store, audit log", "dynamodb": "AWS DynamoDB โ€” read-only content persistence", "neon": "Neon Postgres โ€” orchestration layer" }, "changelog": [ { "version": "0.1.0", "date": "2026-03", "notes": "71 tools, 16 resources, 23 prompts; centralized version constants; accurate capability counts; enhanced README; capabilities endpoint with category breakdown" }, { "version": "0.0.5", "date": "2025-03", "notes": "HEAD method; batch JSON-RPC; X-Request-Id tracing; /api/mcp/validate" }, { "version": "0.0.4", "date": "2025-02", "notes": "DynamoDB read-only tools; orchestrator tools; vertical tools" }, { "version": "0.0.3", "date": "2025-01", "notes": "Federation tools; Product Hunt integration; proxy tools" }, { "version": "0.0.2", "date": "2024-12", "notes": "Site registry; event store; deployment tracking; GitHub tools" }, { "version": "0.0.1", "date": "2024-11", "notes": "Initial release โ€” content, categories, FAQs, search" } ], "links": { "mcp": "https://mcp.platphormnews.com/api/mcp", "health": "https://mcp.platphormnews.com/api/health", "capabilities": "https://mcp.platphormnews.com/api/mcp/capabilities", "discovery": "https://mcp.platphormnews.com/.well-known/mcp.json", "openapi": "https://mcp.platphormnews.com/openapi.yaml", "dashboard": "https://mcp.platphormnews.com/mcp", "docs": "https://mcp.platphormnews.com/docs", "test": "https://mcp.platphormnews.com/api/v1/test/mcp", "testSites": "https://mcp.platphormnews.com/api/v1/test/sites", "liveTestingUI": "https://mcp.platphormnews.com/mcp/test", "llms": "https://mcp.platphormnews.com/llms.txt", "llms-full": "https://mcp.platphormnews.com/llms-full.txt", "sitemap": "https://mcp.platphormnews.com/sitemap.xml", "sitemapMain": "https://platphormnews.com/sitemap-main.xml" }, "generatedAt": "2026-03-15T00:12:46.137Z" }