{
  "version": "1.3.0",
  "owner": "ReplyNodes product team",
  "lastVerified": "2026-08-21",
  "description": "Single verified source of truth for public ReplyNodes product facts. All GEO-facing claims in replynodes-site, replynodes-docs, replynodes-mcp, llms.txt, npm metadata, and the MCP Registry must reconcile against this file. Evidence was collected by the lead on 2026-08-16 via live endpoint probes, app repo inspection, and registry queries. Do not edit claims without updating the evidence.",
  "facts": [
    {
      "id": "mcp-endpoint-remote",
      "claim": "The remote MCP server endpoint is https://app.replynodes.com/api/mcp",
      "value": "https://app.replynodes.com/api/mcp",
      "evidence": "POST without auth returns HTTP 401 (endpoint exists, auth required). Live probe 2026-08-16.",
      "status": "verified"
    },
    {
      "id": "mcp-endpoint-oauth",
      "claim": "The MCP OAuth endpoint is https://app.replynodes.com/api/mcp-oauth",
      "value": "https://app.replynodes.com/api/mcp-oauth",
      "evidence": "GET without auth returns HTTP 401 (endpoint exists). Live probe 2026-08-16.",
      "status": "verified"
    },
    {
      "id": "rest-base-url",
      "claim": "The REST Public API base URL is https://app.replynodes.com/api/public/v1",
      "value": "https://app.replynodes.com/api/public/v1",
      "evidence": "GET https://app.replynodes.com/api/public/v1/posts returns 401; backend controller @Controller('/public/v1') in apps/backend/src/public-api/routes/v1/public.integrations.controller.ts (replynodes/replynodes-app). Live probe 2026-08-16.",
      "status": "verified"
    },
    {
      "id": "rest-base-url-legacy",
      "claim": "https://api.replynodes.com/public/v1 is NOT a valid base URL (legacy host)",
      "value": "https://api.replynodes.com/public/v1",
      "evidence": "Live probes 404 on /public/v1/posts, /public/v1/social/twitter, /is-connected, and the bare base. 2026-08-16.",
      "status": "removed"
    },
    {
      "id": "api-key-location",
      "claim": "API keys are created at app.replynodes.com → Developers (sidebar) → 'API Keys & Agents' at URL /developers",
      "value": "app.replynodes.com/developers",
      "evidence": "apps/frontend/src/components/layout/top.menu.tsx path '/developers'; apps/frontend/src/components/public-api/developers.page.component.tsx title 'API Keys & Agents'. The Developers page is the documented API-key location. 2026-08-16.",
      "status": "verified"
    },
    {
      "id": "api-key-path-legacy",
      "claim": "'Settings → Public API → Access' is NOT where API keys live (legacy docs path)",
      "value": "Settings → Public API → Access",
      "evidence": "No API key tab exists in the app Settings page (see api-key-location). 2026-08-16.",
      "status": "removed"
    },
    {
      "id": "platform-count",
      "claim": "ReplyNodes supports 30+ social networks",
      "value": "30+",
      "evidence": "App social providers: 36 files in libraries/nestjs-libraries/src/integrations/social/ covering 31 distinct networks (bluesky, dev.to, discord, dribbble, facebook, farcaster, gmb, hashnode, instagram, kick, lemmy, linkedin, listmonk, mastodon, medium, mewe, moltbook, nostr, pinterest, reddit, skool, slack, telegram, threads, tiktok, twitch, vk, whop, wordpress, x, youtube). 2026-08-16.",
      "status": "verified"
    },
    {
      "id": "platform-count-stale",
      "claim": "'28+ channels' is a stale count",
      "value": "28+",
      "evidence": "Superseded by platform-count (30+, 31 distinct networks in app repo). 2026-08-16.",
      "status": "removed"
    },
    {
      "id": "mcp-registry-listing",
      "claim": "The MCP server is listed in the official MCP Registry as io.github.replynodes/mcp, version 0.1.2, npm @replynodes/mcp",
      "value": "io.github.replynodes/mcp v0.1.2",
      "evidence": "curl https://registry.modelcontextprotocol.io/v0.1/servers?search=replynodes returned the entry; npm registry shows @replynodes/mcp v0.1.2. 2026-08-16.",
      "status": "verified"
    },
    {
      "id": "pricing",
      "claim": "ReplyNodes Pro costs $19 USD/month",
      "value": "$19 USD/month",
      "evidence": "Issue #161 product contract; components/pricing-plans.ts and app/pricing/page.tsx in replynodes-site. 2026-08-21.",
      "status": "verified"
    },
    {
      "id": "mcp-tool-names",
      "claim": "MCP tool names are camelCase: integrationSchedulePostTool, integrationSchema, triggerTool, uploadFromUrlTool, generateImageTool, generateVideoOptions, generateVideoTool, videoFunctionTool, groupList, integrationList, postsList, postsUpdate, postAnalytics, ask_replynodes, draftPostFromSource, planFounderDistributionAngles",
      "value": "camelCase tool catalog",
      "evidence": "Live MCP server tool catalog; site app/social-media-mcp-server/page.tsx uses camelCase correctly. 2026-08-16.",
      "status": "verified"
    },
    {
      "id": "mcp-auth-format",
      "claim": "Remote MCP authenticates with 'Authorization: Bearer <key>' (Bearer prefix required)",
      "value": "Authorization: Bearer <key>",
      "evidence": "docs mcp/introduction.mdx, hermes.mdx, claude.mdx; site app/social-media-mcp-server/page.tsx. 2026-08-16.",
      "status": "verified"
    },
    {
      "id": "rest-auth-format",
      "claim": "REST Public API authenticates with the raw API key in the Authorization header (no Bearer prefix)",
      "value": "Authorization: <raw key> (no Bearer)",
      "evidence": "docs public-api/index.mdx and mcp/introduction.mdx. 2026-08-16.",
      "status": "verified"
    },
    {
      "id": "self-hosting",
      "claim": "ReplyNodes has an open-source, self-hostable edition",
      "value": "UNVERIFIABLE",
      "evidence": "App repo replynodes/replynodes-app is PRIVATE (gh repo view --json visibility → PRIVATE); docs repo has NO self-hosting page (find content -iname '*self*host*' → none). 2026-08-16.",
      "status": "removed"
    },
    {
      "id": "supported-clients",
      "claim": "Supported AI clients (verified): Claude (Claude Code, Claude Desktop, Claude.ai), Cursor, Codex, OpenClaw, and Hermes connect via the remote MCP server; ChatGPT connects via GPT Actions (REST). Each has a documented setup guide.",
      "value": "Claude, Cursor, Codex, OpenClaw, Hermes (MCP); ChatGPT (GPT Actions)",
      "evidence": "replynodes-mcp README.md L6 lists Claude, Cursor, Codex, OpenClaw, Hermes, ChatGPT; README setup sections for Claude Code plugin, Claude Desktop manual config, Cursor/Windsurf, Codex CLI/OpenClaw; package.json description lists the same six; docs mcp/claude.mdx, hermes.mdx, openclaw.mdx, chatgpt-codex.mdx (chatgpt-codex states ChatGPT/Custom GPTs do not run MCP directly — equivalent is a GPT Action). Verified 2026-08-16.",
      "status": "verified"
    },
    {
      "id": "mcp-discovery-well-known",
      "claim": "The MCP discovery endpoint is https://app.replynodes.com/.well-known/mcp",
      "value": "https://app.replynodes.com/.well-known/mcp",
      "evidence": "GET https://app.replynodes.com/.well-known/mcp returns HTTP 307 redirect to https://app.replynodes.com/auth (endpoint live, auth-gated). Live probe 2026-08-16. Docs mcp/capabilities.mdx reference discovery at .well-known/mcp.",
      "status": "verified"
    },
    {
      "id": "mcp-auth-pos-token",
      "claim": "OAuth app tokens are prefixed pos_ and authenticate the same way as API keys for REST and MCP",
      "value": "pos_ prefixed OAuth app tokens",
      "evidence": "docs public-api/oauth.mdx ('All OAuth tokens are prefixed with pos_'), support/faq.mdx, mcp/capabilities.mdx, cli/introduction.mdx; app repo apps/frontend/src/components/public-api/public.component.tsx: 'you will receive a pos_ prefixed token that works with the API and MCP — just like an API Key'. Verified 2026-08-16.",
      "status": "verified"
    },
    {
      "id": "cli-package",
      "claim": "replynodes-cli v0.1.0 is published on npm (public), binary name 'replynodes'",
      "value": "replynodes-cli@0.1.0",
      "evidence": "npm registry probe https://registry.npmjs.org/replynodes-cli returns 200, dist-tags.latest 0.1.0, bin replynodes (2026-08-16).",
      "status": "verified"
    },
    {
      "id": "node-sdk-absent",
      "claim": "@replynodes/node is NOT published on npm (the docs previously documented it as an SDK)",
      "value": "E404",
      "evidence": "npm registry probe https://registry.npmjs.org/@replynodes/node returns HTTP 404 (2026-08-16).",
      "status": "removed"
    }
  ]
}
