{
  "data": {
    "a": {
      "slug": "oneup",
      "name": "OneUp API + MCP",
      "vendor": "OneUp",
      "vendorUrl": "https://www.oneupapp.io",
      "kind": "http-api",
      "category": "social-media",
      "summary": "Social scheduler with a JSON API and a hosted MCP server.",
      "url": "https://www.anchorterminal.com/tools/oneup",
      "markdownUrl": "https://www.anchorterminal.com/tools/oneup.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/oneup.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/oneup.json",
      "dns": "oneup.grade.anchorterminal.com",
      "transports": [
        "http",
        "streamable-http"
      ],
      "remoteUrl": "https://www.oneupapp.io/api",
      "packages": [],
      "auth": "api-key",
      "authNotes": "One account API key passed as the apiKey query parameter on every call, including the hosted MCP URL. ChatGPT can connect over OAuth instead. Keys are generated and rotated at https://www.oneupapp.io/api-access.",
      "pricing": "paid",
      "pricingNotes": "No free plan, 7-day trial (we found no statement that it needs no card). Basic $25 a month ($15 billed yearly) for 5 social accounts and 300 scheduled posts, Intermediate $60 ($48) for 15, Growth $120 ($84) for 30, Business $300 ($240) for 80, each with unlimited posts. Extra accounts $5, $4, $3 and $1 a month on those plans. X capped at 2, 4, 8 and 10 accounts. API and MCP on every plan, but analytics and comment endpoints need Intermediate or above. Enterprise from $1,000 a month for 1,000 accounts (https://www.oneupapp.io/price).",
      "priceSummary": "$25 / mo",
      "where": "hosted",
      "x402": {
        "level": "no",
        "evidence": "No x402 or per-call payment in the docs or pricing (checked 2026-09-30).",
        "endpoints": []
      },
      "toolCount": 50,
      "popularity": {
        "githubStars": null,
        "npmWeekly": null,
        "pypiWeekly": null,
        "asOf": "2026-09-30"
      },
      "docsUrl": "https://docs.oneupapp.io/docs/overview",
      "capabilities": [
        "social.post",
        "social.schedule",
        "social.analytics",
        "social.comments",
        "social.media-upload"
      ],
      "tags": [
        "hosted",
        "mcp",
        "closed-source",
        "whatsapp"
      ],
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 24.5,
        "grade": "F",
        "agentReady": false,
        "rank": 1439,
        "ranked": true,
        "rankOf": 1510,
        "categoryRank": 19,
        "methodology": "0.7",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 31,
          "maintenance": 43,
          "payments": 10,
          "reliability": 18,
          "schema": 27,
          "security": 17,
          "transparency": 40
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-01"
        },
        "negative": 0,
        "verdict": "API and MCP on every plan from $25 a month ($15 billed yearly). API key in the query string on REST and in the MCP URL, with no scopes.",
        "bestFor": "Small agencies that want posting, comment replies and a WhatsApp inbox from Claude or ChatGPT at a low monthly price.",
        "strengths": [
          "API and MCP on every plan from $25 a month ($15 billed yearly)",
          "Comments, analytics and a Facebook, Instagram and WhatsApp inbox as well as publishing",
          "Hosted MCP that returned 50 tools on 30 September 2026, plus an OAuth path for ChatGPT",
          "requireApproval and isDraftPost flags on post creation give a human review step",
          "11 changelog entries between July and September 2026"
        ],
        "weaknesses": [
          "API key in the query string on REST and in the MCP URL, with no scopes",
          "No OpenAPI spec, no llms.txt and no documented error responses",
          "No status page, no rate limits documented and no SLA",
          "Privacy policy names no subprocessors and has no DPA, and the terms allow discontinuing the service without notice",
          "Analytics and comment endpoints locked out of the Basic plan"
        ],
        "agentNotes": [
          "Call listcategory, then listcategoryaccount, then schedule. Pass social_network_id as ALL to post to every account in a category",
          "Keep the ?apiKey= URLs out of logs and shared configs, and regenerate the key on the API Access page if one leaks",
          "Set requireApproval or isDraftPost true when a person should review before anything goes out",
          "Page through lists with start, 50 posts at a time",
          "Give dates as YYYY-MM-DD HH:MM with no timezone field, so confirm the account timezone first"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 2,
        "avgRating": 1.5,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "F",
            "methodology": "0.7",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 24.5
          }
        ],
        "editorialScores": {
          "ergonomics": 31,
          "maintenance": 43,
          "payments": 10,
          "reliability": 18,
          "schema": 27,
          "security": 17,
          "transparency": 20
        },
        "provenanceScore": 60,
        "checked": {
          "categories": {
            "ergonomics": "2026-10-01",
            "maintenance": "2026-10-01",
            "payments": "2026-10-01",
            "reliability": "2026-10-01",
            "schema": "2026-10-01",
            "security": "2026-10-01",
            "transparency": "2026-10-01"
          },
          "last": "2026-10-01",
          "lastMoved": "2026-10-27",
          "oldest": "2026-10-01",
          "stale": false,
          "staleAfterDays": 90
        }
      },
      "connect": {
        "http": "curl \"https://www.oneupapp.io/api/listcategory?apiKey=$ONEUP_API_KEY\"",
        "claudeCode": "claude mcp add --transport http oneup \"https://feed.oneupapp.io/mcp/oneup?apiKey=$ONEUP_API_KEY\""
      },
      "letme": {
        "capability": "https://letme.dev/social.post",
        "tool": "https://letme.dev/oneup"
      },
      "area": "communication",
      "unitPrices": [
        {
          "item": "Basic",
          "unit": "month",
          "usd": 25,
          "note": "5 social accounts, no analytics or comment endpoints. $15 a month billed yearly"
        },
        {
          "item": "Intermediate",
          "unit": "month",
          "usd": 60,
          "note": "15 social accounts. $48 a month billed yearly"
        },
        {
          "item": "Growth",
          "unit": "month",
          "usd": 120,
          "note": "30 social accounts. $84 a month billed yearly"
        },
        {
          "item": "Business",
          "unit": "month",
          "usd": 300,
          "note": "80 social accounts. $240 a month billed yearly"
        }
      ],
      "provenance": {
        "legalEntity": "OneUp, Inc.",
        "domain": "oneupapp.io",
        "domainRegistered": "",
        "endpointOnVendorDomain": true,
        "terms": "https://www.oneupapp.io/terms",
        "privacy": "https://www.oneupapp.io/privacy",
        "statusPage": "",
        "changelog": "https://help.oneupapp.io/en-us/article/oneup-roadmap-product-updates-changelog-new-features-and-feature-requests-1vs2exx/",
        "securityTxt": "none",
        "checked": "2026-09-30",
        "notes": [
          "The terms name OneUp, Inc. of Cranberry Township, Pennsylvania.",
          "rdap.org has no RDAP service for .io, so the registration date is unread."
        ],
        "score": 60
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/oneup.json",
      "live": {
        "slug": "oneup",
        "probe": {
          "target": "https://www.oneupapp.io/api",
          "method": "get",
          "lastAt": "2026-11-08T00:55:55.231504149Z",
          "lastOk": true,
          "lastStatus": 404,
          "lastMs": 386,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 99.74,
          "p50ms24h": 374,
          "p95ms24h": 478,
          "samples24h": 244,
          "samples30d": 7704,
          "days": [
            {
              "date": "2026-10-08",
              "probes": 268,
              "ok": 268
            },
            {
              "date": "2026-10-09",
              "probes": 250,
              "ok": 250
            },
            {
              "date": "2026-10-10",
              "probes": 247,
              "ok": 247
            },
            {
              "date": "2026-10-11",
              "probes": 247,
              "ok": 247
            },
            {
              "date": "2026-10-12",
              "probes": 247,
              "ok": 247
            },
            {
              "date": "2026-10-13",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-14",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-10-15",
              "probes": 253,
              "ok": 253
            },
            {
              "date": "2026-10-16",
              "probes": 252,
              "ok": 252
            },
            {
              "date": "2026-10-17",
              "probes": 253,
              "ok": 253
            },
            {
              "date": "2026-10-18",
              "probes": 256,
              "ok": 256
            },
            {
              "date": "2026-10-19",
              "probes": 255,
              "ok": 255
            },
            {
              "date": "2026-10-20",
              "probes": 252,
              "ok": 252
            },
            {
              "date": "2026-10-21",
              "probes": 253,
              "ok": 252
            },
            {
              "date": "2026-10-22",
              "probes": 253,
              "ok": 251
            },
            {
              "date": "2026-10-23",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-24",
              "probes": 251,
              "ok": 251
            },
            {
              "date": "2026-10-25",
              "probes": 250,
              "ok": 250
            },
            {
              "date": "2026-10-26",
              "probes": 252,
              "ok": 252
            },
            {
              "date": "2026-10-27",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-10-28",
              "probes": 251,
              "ok": 240
            },
            {
              "date": "2026-10-29",
              "probes": 248,
              "ok": 245
            },
            {
              "date": "2026-10-30",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-10-31",
              "probes": 251,
              "ok": 251
            },
            {
              "date": "2026-11-01",
              "probes": 249,
              "ok": 249
            },
            {
              "date": "2026-11-02",
              "probes": 250,
              "ok": 250
            },
            {
              "date": "2026-11-03",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-11-04",
              "probes": 246,
              "ok": 246
            },
            {
              "date": "2026-11-05",
              "probes": 185,
              "ok": 185
            },
            {
              "date": "2026-11-06",
              "probes": 241,
              "ok": 238
            },
            {
              "date": "2026-11-07",
              "probes": 243,
              "ok": 243
            },
            {
              "date": "2026-11-08",
              "probes": 10,
              "ok": 10
            }
          ],
          "outages": [
            {
              "start": "2026-11-06T10:33:46.943300656Z",
              "end": "2026-11-06T10:51:24.979368657Z",
              "note": "timed out"
            },
            {
              "start": "2026-10-28T17:02:47.764493376Z",
              "end": "2026-10-28T17:19:21.452152158Z",
              "note": "timed out"
            }
          ]
        },
        "securityTxt": {
          "url": "https://oneupapp.io/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-11-07T16:01:43.184435894Z"
        },
        "domain": {
          "domain": "oneupapp.io",
          "checkedAt": "2026-11-01T14:25:04.106331606Z"
        },
        "pages": [
          {
            "url": "https://help.oneupapp.io/en-us/article/oneup-roadmap-product-updates-changelog-new-features-and-feature-requests-1vs2exx/",
            "kind": "changelog",
            "status": 304,
            "checkedAt": "2026-11-07T14:10:59.67696147Z",
            "changedAt": "2026-11-06T13:33:02.704584116Z",
            "fingerprint": "742b828d82eb"
          },
          {
            "url": "https://www.oneupapp.io/price",
            "kind": "pricing",
            "status": 200,
            "checkedAt": "2026-11-07T14:32:17.95863534Z",
            "changedAt": "2026-10-29T05:25:41.782407035Z",
            "fingerprint": "2dcc65b76a52"
          },
          {
            "url": "https://www.oneupapp.io/privacy",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-11-07T14:32:20.638836324Z",
            "changedAt": "2026-10-22T01:35:03.096129817Z",
            "fingerprint": "8d6b2795a7a3"
          },
          {
            "url": "https://www.oneupapp.io/terms",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-11-07T14:32:22.089394311Z",
            "changedAt": "2026-10-22T01:35:04.594075778Z",
            "fingerprint": "bb7fcd9ab62d"
          }
        ],
        "mcpTools": {
          "url": "https://feed.oneupapp.io/mcp/oneup?apiKey=$ONEUP_API_KEY",
          "checkedAt": "2026-11-07T01:46:34.47238256Z",
          "status": "ok",
          "note": "answered without the initialize handshake",
          "tools": [
            {
              "name": "list-categories-tool",
              "title": "List Categories Tool",
              "description": "Lists all categories (groups of social accounts) in your OneUp account. Use this to find category IDs for scheduling posts.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "categories": {
                    "description": "Categories in the connected OneUp account.",
                    "items": {
                      "type": "object"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "categories"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "list-social-accounts-tool",
              "title": "List Social Accounts Tool",
              "description": "Lists all connected social media accounts across all platforms. Shows account status and expiration info.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "accounts": {
                    "description": "Connected social accounts in the OneUp account.",
                    "items": {
                      "type": "object"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "accounts"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "list-category-accounts-tool",
              "title": "List Category Accounts Tool",
              "description": "Lists social accounts within a specific category. Use this to get social_network_id values for scheduling posts.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "category_id": {
                    "description": "The category ID to list accounts from (use list-categories to find IDs)",
                    "type": "integer"
                  }
                },
                "required": [
                  "category_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "accounts": {
                    "description": "Connected social accounts in the selected category.",
                    "items": {
                      "type": "object"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "accounts"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "fetch-pinterest-boards-tool",
              "title": "Fetch Pinterest Boards Tool",
              "description": "Fetches the list of Pinterest boards for a given Pinterest username. Returns board_name and board_id for each board.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "pinterest_username": {
                    "description": "The Pinterest username to fetch boards for",
                    "type": "string"
                  }
                },
                "required": [
                  "pinterest_username"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "boards": {
                    "description": "Pinterest boards available to the connected account.",
                    "items": {
                      "type": "object"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "boards"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "fetch-you-tube-playlists-tool",
              "title": "Fetch You Tube Playlists Tool",
              "description": "Fetches YouTube playlists for a given YouTube channel. Returns playlist_name and playlist_id for each playlist.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "social_account_id": {
                    "description": "The YouTube channel's social account ID. Find it using list-social-accounts or list-category-accounts.",
                    "type": "string"
                  }
                },
                "required": [
                  "social_account_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "playlists": {
                    "description": "YouTube playlists available to the connected channel.",
                    "type": [
                      "array",
                      "object"
                    ]
                  }
                },
                "required": [
                  "playlists"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "get-tiktok-trending-sound-tool",
              "title": "Get Tiktok Trending Sound Tool",
              "description": "Fetches trending TikTok sounds/music. IMPORTANT: Before calling this tool, you MUST ask the user to provide: (1) their country code, (2) their preferred date range, and (3) their preferred genre. Do NOT assume or fill in default values for these parameters. Present the available options and wait for the user to respond before making this call. After receiving results, present all sounds as a numbered list and ask the user to choose one.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "country_code": {
                    "description": "REQUIRED: You MUST ask the user which country to use before calling this tool. ISO 3166-1 alpha-2 country code (e.g., US, GB, CA, AU, PH, JP, BR, DE, FR, IN). Do NOT guess or default to any country.",
                    "type": "string"
                  },
                  "date_range": {
                    "description": "REQUIRED: You MUST ask the user which date range they prefer. Valid options: 1DAY (today), 7DAY (past week), 30DAY (past month), 90DAY (past 3 months). Suggest 7DAY as a good starting point, but let the user choose.",
                    "enum": [
                      "1DAY",
                      "7DAY",
                      "30DAY",
                      "90DAY"
                    ],
                    "type": "string"
                  },
                  "genre": {
                    "description": "REQUIRED: You MUST ask the user which genre they prefer. Valid options: ALL (all genres), POP, HIP_HOP_RAP, ROCK, RNB_SOUL, DANCE_ELECTRONIC, LATIN, COUNTRY, INDIE_ALT, KPOP, JPOP, and more. Suggest ALL if they want broad results, but let the user choose.",
                    "enum": [
                      "ALL",
                      "POP",
                      "HIP_HOP_RAP",
                      "ROCK",
                      "RNB_SOUL",
                      "DANCE_ELECTRONIC",
                      "LATIN",
                      "COUNTRY",
                      "INDIE_ALT",
                      "KPOP",
                      "JPOP",
                      "CLASSICAL",
                      "METAL",
                      "FOLK_ACOUSTIC",
                      "JAZZ",
                      "BLUES",
                      "REGGAE",
                      "WORLD_MUSIC"
                    ],
                    "type": "string"
                  },
                  "social_account_id": {
                    "description": "The TikTok account's social account ID. Find it using list-social-accounts or list-category-accounts.",
                    "type": "string"
                  }
                },
                "required": [
                  "country_code",
                  "date_range",
                  "genre",
                  "social_account_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "sounds": {
                    "description": "Trending TikTok sounds matching the requested filters.",
                    "items": {
                      "type": "object"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "sounds"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": true,
                "readOnlyHint": true
              }
            },
            {
              "name": "get-instagram-trending-sound-tool",
              "title": "Get Instagram Trending Sound Tool",
              "description": "Fetches trending Instagram sounds/music. IMPORTANT: Before calling this tool, you MUST ask the user if they want to search for a specific sound or get general trending sounds. You also need to identify an Instagram account with account_type=1 (Facebook-connected Business/Creator account). Use list-social-accounts to find the Instagram account ID (this is the only API that returns account_type). After receiving results, present all sounds as a numbered list and ask the user to choose one.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "search_query": {
                    "description": "OPTIONAL: Search query to filter trending sounds (e.g., \"game of thrones\"). Leave empty or omit for general trending sounds. Ask the user if they want to search for something specific or get general trending.",
                    "type": "string"
                  },
                  "social_account_id": {
                    "description": "REQUIRED: The Instagram account's social account ID. Use list-social-accounts to find it (this is the only API that returns account_type). IMPORTANT: Only Instagram accounts with account_type=1 (Facebook-connected Business/Creator accounts) work with trending sounds.",
                    "type": "string"
                  }
                },
                "required": [
                  "social_account_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "sounds": {
                    "description": "Trending Instagram sounds matching the requested search.",
                    "type": [
                      "array",
                      "object"
                    ]
                  }
                },
                "required": [
                  "sounds"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": true,
                "readOnlyHint": true
              }
            },
            {
              "name": "schedule-text-post-tool",
              "title": "Schedule Text Post Tool",
              "description": "Schedules a text-only post to one or more social media accounts. The post will be published at the specified time.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "category_id": {
                    "description": "The category ID that groups your target accounts",
                    "type": "integer"
                  },
                  "content": {
                    "description": "The text content of your post",
                    "type": "string"
                  },
                  "coupon_code": {
                    "description": "Coupon code for GBP offer (optional)",
                    "type": "string"
                  },
                  "cta_button": {
                    "description": "GBP CTA button: CALL (Call), LEARN_MORE (Learn more), BOOK (Book), SIGN_UP (Sign up), ORDER (Order online), SHOP (Buy)",
                    "type": "string"
                  },
                  "cta_button_url": {
                    "description": "URL for GBP CTA button (required unless cta_button is CALL)",
                    "type": "string"
                  },
                  "event_end_date": {
                    "description": "GBP event end date (YYYY-MM-DD HH:MM am/pm format)",
                    "type": "string"
                  },
                  "event_start_date": {
                    "description": "GBP event start date (YYYY-MM-DD HH:MM am/pm format)",
                    "type": "string"
                  },
                  "event_title": {
                    "description": "Title for GBP event post (required when google_post_type is \"event\")",
                    "type": "string"
                  },
                  "facebook": {
                    "description": "{ \"locationId\": number } - locationId: The Facebook location ID for tagging a location on the post",
                    "type": "object"
                  },
                  "first_comment": {
                    "description": "First comment (for Facebook, Instagram, LinkedIn, YouTube)",
                    "type": "string"
                  },
                  "google_post_type": {
                    "description": "Google Business Profile post type: \"update\", \"event\", or \"offer\". Required when posting to GBP.",
                    "type": "string"
                  },
                  "isDraftPost": {
                    "description": "Set to true to save as a draft instead of scheduling. Default: false",
                    "type": "boolean"
                  },
                  "link_to_redeem_url": {
                    "description": "URL to redeem GBP offer (optional)",
                    "type": "string"
                  },
                  "offer_end_date": {
                    "description": "GBP offer end date (YYYY-MM-DD HH:MM am/pm format)",
                    "type": "string"
                  },
                  "offer_start_date": {
                    "description": "GBP offer start date (YYYY-MM-DD HH:MM am/pm format)",
                    "type": "string"
                  },
                  "offer_title": {
                    "description": "Title for GBP offer post (required when google_post_type is \"offer\")",
                    "type": "string"
                  },
                  "requireApproval": {
                    "default": false,
                    "description": "Set to true to require approval before the post is published.",
                    "type": "boolean"
                  },
                  "scheduled_date_time": {
                    "description": "The date and time (in YYYY-MM-DD HH:MM format) when the post should be published. Alternatively, you can pass \"timeslot\" to use your predefined time slots.",
                    "type": "string"
                  },
                  "social_network_id": {
                    "description": "Account ID, array of IDs, or \"ALL\" to post to all accounts in the category",
                    "type": "string"
                  },
                  "subreddit": {
                    "description": "The target location for your post. To publish to a Subreddit: Use the subreddit name (e.g., vishal2947world). To publish to your Profile: Prefix your username with u_ (e.g., u_daviswbaer).",
                    "type": "string"
                  },
                  "title": {
                    "description": "The title of your post. For YouTube and Reddit, it serves as the post title. For Threads, it's used as the topic.",
                    "type": "string"
                  }
                },
                "required": [
                  "category_id",
                  "social_network_id",
                  "scheduled_date_time",
                  "content"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "message": {
                    "description": "Human-readable result message.",
                    "type": "string"
                  },
                  "post_ids": {
                    "description": "IDs of the newly scheduled posts, one per social account. Pass these as post_id to edit-post or delete-scheduled-post.",
                    "items": {
                      "type": "integer"
                    },
                    "type": "array"
                  },
                  "success": {
                    "description": "Whether the post was scheduled successfully.",
                    "type": "boolean"
                  }
                },
                "required": [
                  "success",
                  "message"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": true,
                "readOnlyHint": false
              }
            },
            {
              "name": "schedule-image-post-tool",
              "title": "Schedule Image Post Tool",
              "description": "Schedules an image post to one or more social media accounts. Supports multiple images and platform-specific options.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "category_id": {
                    "description": "Category ID",
                    "type": "integer"
                  },
                  "content": {
                    "description": "Post caption/text. Defaults to \".\" for Facebook and Instagram stories if omitted or empty.",
                    "type": "string"
                  },
                  "coupon_code": {
                    "description": "Coupon code for GBP offer (optional)",
                    "type": "string"
                  },
                  "cta_button": {
                    "description": "GBP CTA button: CALL (Call), LEARN_MORE (Learn more), BOOK (Book), SIGN_UP (Sign up), ORDER (Order online), SHOP (Buy)",
                    "type": "string"
                  },
                  "cta_button_url": {
                    "description": "URL for GBP CTA button (required unless cta_button is CALL)",
                    "type": "string"
                  },
                  "event_end_date": {
                    "description": "GBP event end date (YYYY-MM-DD HH:MM am/pm format)",
                    "type": "string"
                  },
                  "event_start_date": {
                    "description": "GBP event start date (YYYY-MM-DD HH:MM am/pm format)",
                    "type": "string"
                  },
                  "event_title": {
                    "description": "Title for GBP event post (required when google_post_type is \"event\")",
                    "type": "string"
                  },
                  "facebook": {
                    "description": "{ \"isStory\": true/false, \"locationId\": number } - locationId: The Facebook location ID for tagging a location on the post",
                    "type": "object"
                  },
                  "first_comment": {
                    "description": "First comment",
                    "type": "string"
                  },
                  "google_post_type": {
                    "description": "Google Business Profile post type: \"update\", \"event\", \"offer\", or \"none\". Required when posting to GBP. When set to \"none\", the image will only be added to the Photos section of GBP and will not publish as a GBP Post.",
                    "type": "string"
                  },
                  "image_to_gbp_photo": {
                    "description": "Set to true to also add the image to the Photos section of your Google Business Profile. Only applicable when posting to a GBP account. Default: false",
                    "type": "boolean"
                  },
                  "image_url": {
                    "description": "Image URL(s). Separate multiple with ~~. Required unless isDraftPost is true. When isDraftPost is true, omit this parameter entirely (do not send an empty string or invent a placeholder URL) — the draft is saved without publishing, so no platform media requirement applies yet.",
                    "type": "string"
                  },
                  "instagram": {
                    "description": "{ \"isStory\": true/false, \"collaborator\": \"user1,user2\", \"locationId\": number, \"is_ai_generated\": true/false } - collaborator: comma-separated Instagram usernames (max 5, no @ symbol). locationId: The Instagram location ID for tagging a location on the post. is_ai_generated: Set to true to label the post as AI-generated on Instagram. Default: false",
                    "type": "object"
                  },
                  "isDraftPost": {
                    "description": "Set to true to save as a draft instead of scheduling. Default: false. When true, image_url is not required — omit it rather than supplying a placeholder or empty string.",
                    "type": "boolean"
                  },
                  "link_to_redeem_url": {
                    "description": "URL to redeem GBP offer (optional)",
                    "type": "string"
                  },
                  "offer_end_date": {
                    "description": "GBP offer end date (YYYY-MM-DD HH:MM am/pm format)",
                    "type": "string"
                  },
                  "offer_start_date": {
                    "description": "GBP offer start date (YYYY-MM-DD HH:MM am/pm format)",
                    "type": "string"
                  },
                  "offer_title": {
                    "description": "Title for GBP offer post (required when google_post_type is \"offer\")",
                    "type": "string"
                  },
                  "pinterest": {
                    "description": "MANDATORY for Pinterest accounts. This field is required when posting to any Pinterest account (account IDs starting with \"pin_\"). The API request will fail without it. JSON object: { \"board_name\": \"Board Name\", \"board_id\": \"123456\", \"destination_link\": \"https://example.com\" } - destination_link: Optional URL to add as the destination link for the Pin. Use fetch-pinterest-boards to get available boards first.",
                    "type": "object"
                  },
                  "requireApproval": {
                    "default": false,
                    "description": "Set to true to require approval before the post is published.",
                    "type": "boolean"
                  },
                  "scheduled_date_time": {
                    "description": "The date and time (in YYYY-MM-DD HH:MM format) when the post should be published. Alternatively, you can pass \"timeslot\" to use your predefined time slots.",
                    "type": "string"
                  },
                  "snapchat": {
                    "description": "{ \"isSpotLight\": true/false }",
                    "type": "object"
                  },
                  "social_network_id": {
                    "description": "Account ID, array of IDs, or \"ALL\" to post to all accounts in the category",
                    "type": "string"
                  },
                  "subreddit": {
                    "description": "The target location for your post. To publish to a Subreddit: Use the subreddit name (e.g., vishal2947world). To publish to your Profile: Prefix your username with u_ (e.g., u_daviswbaer).",
                    "type": "string"
                  },
                  "tiktok": {
                    "description": "Optional TikTok parameters. JSON object with these options (combinable): 1) { \"autoAddMusic\": true/false } - Let TikTok automatically add music (default: true). 2) { \"musicOption\": { \"music_title\": \"...\", \"music_sound_id\": \"...\", \"music_url\": \"...\", \"music_thumbnail\": \"...\", \"music_author\": \"...\" } } - Specify exact music. If provided, ALL fields inside musicOption are REQUIRED. 3) { \"is_ai_generated\": true/false } - Set to true to disclose AI-generated content per TikTok's Content Disclosure policy. Default: false. 4) { \"is_your_brand\": true/false } - Set to true if the post promotes your own brand, product, or service — TikTok labels it \"Promotional content\". Default: false. 5) { \"is_branded_content\": true/false } - Set to true if the post promotes another brand or third party — TikTok labels it \"Paid partnership\". Default: false. Use get-tiktok-trending-sound to fetch trending music.",
                    "type": "object"
                  },
                  "title": {
                    "description": "The title of your post. For YouTube and Reddit, it serves as the post title. For Threads, it's used as the topic.",
                    "type": "string"
                  }
                },
                "required": [
                  "category_id",
                  "social_network_id",
                  "scheduled_date_time",
                  "content"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "message": {
                    "description": "Human-readable result message.",
                    "type": "string"
                  },
                  "post_ids": {
                    "description": "IDs of the newly scheduled posts, one per social account. Pass these as post_id to edit-post or delete-scheduled-post.",
                    "items": {
                      "type": "integer"
                    },
                    "type": "array"
                  },
                  "success": {
                    "description": "Whether the image post was scheduled successfully.",
                    "type": "boolean"
                  }
                },
                "required": [
                  "success",
                  "message"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": true,
                "readOnlyHint": false
              }
            },
            {
              "name": "schedule-video-post-tool",
              "title": "Schedule Video Post Tool",
              "description": "Schedules a video post to one or more social media accounts. Supports thumbnails and platform-specific options.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "category_id": {
                    "description": "Category ID",
                    "type": "integer"
                  },
                  "content": {
                    "description": "Post caption/text. Defaults to \".\" for Facebook and Instagram stories if omitted or empty.",
                    "type": "string"
                  },
                  "coupon_code": {
                    "description": "Coupon code for GBP offer (optional)",
                    "type": "string"
                  },
                  "cta_button": {
                    "description": "GBP CTA button: CALL (Call), LEARN_MORE (Learn more), BOOK (Book), SIGN_UP (Sign up), ORDER (Order online), SHOP (Buy)",
                    "type": "string"
                  },
                  "cta_button_url": {
                    "description": "URL for GBP CTA button (required unless cta_button is CALL)",
                    "type": "string"
                  },
                  "event_end_date": {
                    "description": "GBP event end date (YYYY-MM-DD HH:MM am/pm format)",
                    "type": "string"
                  },
                  "event_start_date": {
                    "description": "GBP event start date (YYYY-MM-DD HH:MM am/pm format)",
                    "type": "string"
                  },
                  "event_title": {
                    "description": "Title for GBP event post (required when google_post_type is \"event\")",
                    "type": "string"
                  },
                  "facebook": {
                    "description": "{ \"isStory\": true/false, \"locationId\": number, \"is_ai_generated\": true/false } - Facebook publishes all videos as Reels. locationId: The Facebook location ID for tagging a location on the post. is_ai_generated: Set to true to label the Reel as AI-generated on Facebook. Default: false",
                    "type": "object"
                  },
                  "first_comment": {
                    "description": "First comment",
                    "type": "string"
                  },
                  "google_post_type": {
                    "description": "Google Business Profile post type: \"update\", \"event\", or \"offer\". Required when posting to GBP.",
                    "type": "string"
                  },
                  "instagram": {
                    "description": "{ \"isStory\": true/false, \"addToFeed\": 1|0, \"isTrialReel\": 1|2, \"collaborator\": \"user1,user2\", \"locationId\": number, \"is_ai_generated\": true/false, \"musicOption\": { \"music_sound_id\": \"...\", \"music_title\": \"...\", \"music_url\": \"...\" } } - addToFeed: 1 = reel appears on Posts tab (Feed), 0 = reel only in Reels tab. Default: 1. collaborator: comma-separated Instagram usernames (max 5, no @ symbol). locationId: The Instagram location ID for tagging a location on the post. is_ai_generated: Set to true to label the post as AI-generated on Instagram. Default: false. musicOption: Add trending music to your Instagram video. Use get-instagram-trending-sound to fetch trending music.",
                    "type": "object"
                  },
                  "isDraftPost": {
                    "description": "Set to true to save as a draft instead of scheduling. Default: false. When true, video_url is not required — omit it rather than supplying a placeholder or empty string.",
                    "type": "boolean"
                  },
                  "link_to_redeem_url": {
                    "description": "URL to redeem GBP offer (optional)",
                    "type": "string"
                  },
                  "offer_end_date": {
                    "description": "GBP offer end date (YYYY-MM-DD HH:MM am/pm format)",
                    "type": "string"
                  },
                  "offer_start_date": {
                    "description": "GBP offer start date (YYYY-MM-DD HH:MM am/pm format)",
                    "type": "string"
                  },
                  "offer_title": {
                    "description": "Title for GBP offer post (required when google_post_type is \"offer\")",
                    "type": "string"
                  },
                  "pinterest": {
                    "description": "MANDATORY for Pinterest accounts. This field is required when posting to any Pinterest account (account IDs starting with \"pin_\"). The API request will fail without it. JSON object: { \"board_name\": \"Board Name\", \"board_id\": \"123456\", \"destination_link\": \"https://example.com\" } - destination_link: Optional URL to add as the destination link for the Pin. Use fetch-pinterest-boards to get available boards first.",
                    "type": "object"
                  },
                  "requireApproval": {
                    "default": false,
                    "description": "Set to true to require approval before the post is published.",
                    "type": "boolean"
                  },
                  "scheduled_date_time": {
                    "description": "The date and time (in YYYY-MM-DD HH:MM format) when the post should be published. Alternatively, you can pass \"timeslot\" to use your predefined time slots.",
                    "type": "string"
                  },
                  "snapchat": {
                    "description": "{ \"isSpotLight\": bool }",
                    "type": "object"
                  },
                  "social_network_id": {
                    "description": "Account ID, array of IDs, or \"ALL\" to post to all accounts in the category",
                    "type": "string"
                  },
                  "subreddit": {
                    "description": "The target location for your post. To publish to a Subreddit: Use the subreddit name (e.g., vishal2947world). To publish to your Profile: Prefix your username with u_ (e.g., u_daviswbaer).",
                    "type": "string"
                  },
                  "thumbnail_url": {
                    "description": "Optional thumbnail URL",
                    "type": "string"
                  },
                  "tiktok": {
                    "description": "Optional TikTok parameters for video posts. JSON object: { \"is_ai_generated\": true/false, \"is_your_brand\": true/false, \"is_branded_content\": true/false, \"musicOption\": { \"music_title\": \"...\", \"music_sound_id\": \"...\", \"music_url\": \"...\", \"music_thumbnail\": \"...\", \"music_author\": \"...\" } }. is_ai_generated: Set to true to disclose AI-generated content per TikTok's Content Disclosure policy. Default: false. is_your_brand: Set to true if the post promotes your own brand, product, or service — TikTok labels it \"Promotional content\". Default: false. is_branded_content: Set to true if the post promotes another brand or third party — TikTok labels it \"Paid partnership\". Default: false. musicOption: Add trending music to your TikTok post — if provided, ALL fields inside musicOption are REQUIRED. Use get-tiktok-trending-sound to fetch trending music.",
                    "type": "object"
                  },
                  "title": {
                    "description": "The title of your post. For YouTube and Reddit, it serves as the post title. For Threads, it's used as the topic.",
                    "type": "string"
                  },
                  "video_url": {
                    "description": "Video URL. Required unless isDraftPost is true. When isDraftPost is true, omit this parameter entirely (do not send an empty string or invent a placeholder URL) — the draft is saved without publishing, so no platform media requirement applies yet.",
                    "type": "string"
                  },
                  "youtube": {
                    "description": "Optional YouTube options for video posts (all fields optional). JSON object: { \"privacy\": \"public|private|unlisted\", \"made_for_kids\": true/false, \"tags\": [\"a\",\"b\"] or \"a,b\", \"is_short\": true/false, \"notify_subscribers\": true/false, \"playlist_id\": \"PLxxxxxx\", \"playlist_name\": \"Playlist Name\", \"ai_generated_content\": true/false }. privacy: video visibility, default \"public\". made_for_kids: default false. tags: array or comma-separated string, max 500 characters in total. is_short: publish as a YouTube Short, default false (portrait videos of 3 minutes or less are posted as Shorts automatically). notify_subscribers: set to false to publish without notifying subscribers, default true. playlist_id + playlist_name: add the video to a playlist — pass both, using values from fetch-you-tube-playlists-tool. ai_generated_content: disclose AI-generated content, default false.",
                    "type": "object"
                  }
                },
                "required": [
                  "category_id",
                  "social_network_id",
                  "scheduled_date_time",
                  "content"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "message": {
                    "description": "Human-readable result message.",
                    "type": "string"
                  },
                  "post_ids": {
                    "description": "IDs of the newly scheduled posts, one per social account. Pass these as post_id to edit-post or delete-scheduled-post.",
                    "items": {
                      "type": "integer"
                    },
                    "type": "array"
                  },
                  "success": {
                    "description": "Whether the video post was scheduled successfully.",
                    "type": "boolean"
                  }
                },
                "required": [
                  "success",
                  "message"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": true,
                "readOnlyHint": false
              }
            },
            {
              "name": "get-scheduled-posts-tool",
              "title": "Get Scheduled Posts Tool",
              "description": "Retrieves scheduled posts that are waiting to be published. Returns up to 50 posts per call. This endpoint is paginated: to fetch all posts, start with start=0, then call again with start=50, start=100, and so on, increasing start by 50 each time. When the response includes a \"next_start\" value, more posts are available - call this tool again passing that value as start. Keep paginating until \"next_start\" is null.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "start": {
                    "description": "Pagination offset (default: 0). Each page returns up to 50 posts. To fetch the next page, pass the \"next_start\" value from the previous response, or increase start by 50.",
                    "type": "integer"
                  }
                },
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "count": {
                    "description": "Number of posts returned in this page.",
                    "type": "integer"
                  },
                  "next_start": {
                    "description": "Pagination offset for the next page, or null when this is the final page.",
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "posts": {
                    "description": "Scheduled posts returned for the requested page.",
                    "items": {
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "start": {
                    "description": "Pagination offset used for this page.",
                    "type": "integer"
                  }
                },
                "required": [
                  "posts",
                  "start",
                  "count",
                  "next_start"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "get-scheduled-posts-by-id-tool",
              "title": "Get Scheduled Posts By Id Tool",
              "description": "Retrieves specific scheduled posts by their IDs. Use this to check the status of posts you just scheduled without paging through the entire queue with get-scheduled-posts. Pass the post_ids returned by schedule-text-post, schedule-image-post, or schedule-video-post.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "post_ids": {
                    "description": "IDs of the scheduled posts to retrieve. Use the post_ids returned when scheduling a post, or the post_id values from get-scheduled-posts.",
                    "items": {
                      "type": "integer"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "post_ids"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "count": {
                    "description": "Number of posts returned.",
                    "type": "integer"
                  },
                  "posts": {
                    "description": "Scheduled posts matching the requested IDs. Each includes post_id, content, date_time, category_name, social_network_username, and isPublished status.",
                    "items": {
                      "type": "object"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "posts",
                  "count"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "get_published_posts",
              "title": "Get Published Posts",
              "description": "Retrieves posts that have been successfully published. Returns up to 50 posts per call. This endpoint is paginated: to fetch all posts, start with start=0, then call again with start=50, start=100, and so on, increasing start by 50 each time. When the response includes a \"next_start\" value, more posts are available - call this tool again passing that value as start. Keep paginating until \"next_start\" is null.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "start": {
                    "description": "Pagination offset (default: 0). Each page returns up to 50 posts. To fetch the next page, pass the \"next_start\" value from the previous response, or increase start by 50.",
                    "type": "integer"
                  }
                },
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "count": {
                    "description": "Number of posts returned in this page.",
                    "type": "integer"
                  },
                  "next_start": {
                    "description": "Pagination offset for the next page, or null when this is the final page.",
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "posts": {
                    "description": "Published posts returned for the requested page.",
                    "items": {
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "start": {
                    "description": "Pagination offset used for this page.",
                    "type": "integer"
                  }
                },
                "required": [
                  "posts",
                  "start",
                  "count",
                  "next_start"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "get-failed-posts-tool",
              "title": "Get Failed Posts Tool",
              "description": "Retrieves posts that failed to publish, including the failure reason. Returns up to 50 posts per call. This endpoint is paginated: to fetch all posts, start with start=0, then call again with start=50, start=100, and so on, increasing start by 50 each time. When the response includes a \"next_start\" value, more posts are available - call this tool again passing that value as start. Keep paginating until \"next_start\" is null.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "start": {
                    "description": "Pagination offset (default: 0). Each page returns up to 50 posts. To fetch the next page, pass the \"next_start\" value from the previous response, or increase start by 50.",
                    "type": "integer"
                  }
                },
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "count": {
                    "description": "Number of posts returned in this page.",
                    "type": "integer"
                  },
                  "next_start": {
                    "description": "Pagination offset for the next page, or null when this is the final page.",
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "posts": {
                    "description": "Failed posts returned for the requested page.",
                    "items": {
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "start": {
                    "description": "Pagination offset used for this page.",
                    "type": "integer"
                  }
                },
                "required": [
                  "posts",
                  "start",
                  "count",
                  "next_start"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "get-draft-posts-tool",
              "title": "Get Draft Posts Tool",
              "description": "Retrieves draft posts that have been saved but not scheduled or published. Returns up to 50 posts per call. This endpoint is paginated: to fetch all posts, start with start=0, then call again with start=50, start=100, and so on, increasing start by 50 each time. When the response includes a \"next_start\" value, more posts are available - call this tool again passing that value as start. Keep paginating until \"next_start\" is null. Use the post_id from a draft to edit it with edit-post.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "start": {
                    "description": "Pagination offset (default: 0). Each page returns up to 50 posts. To fetch the next page, pass the \"next_start\" value from the previous response, or increase start by 50.",
                    "type": "integer"
                  }
                },
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "count": {
                    "description": "Number of posts returned in this page.",
                    "type": "integer"
                  },
                  "next_start": {
                    "description": "Pagination offset for the next page, or null when this is the final page.",
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "posts": {
                    "description": "Draft posts returned for the requested page.",
                    "items": {
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "start": {
                    "description": "Pagination offset used for this page.",
                    "type": "integer"
                  }
                },
                "required": [
                  "posts",
                  "start",
                  "count",
                  "next_start"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "delete-scheduled-post-tool",
              "title": "Delete Scheduled Post Tool",
              "description": "Deletes a scheduled post that has not yet been published. Use the post_ids returned by schedule-text-post, schedule-image-post, or schedule-video-post, or use get-scheduled-posts to find the post_id.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "post_id": {
                    "description": "The ID of the scheduled post to delete. Find it using get-scheduled-posts.",
                    "type": "integer"
                  }
                },
                "required": [
                  "post_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "message": {
                    "description": "Human-readable result message.",
                    "type": "string"
                  },
                  "success": {
                    "description": "Whether the scheduled post was deleted successfully.",
                    "type": "boolean"
                  }
                },
                "required": [
                  "success",
                  "message"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": true,
                "openWorldHint": false,
                "readOnlyHint": false
              }
            },
            {
              "name": "delete-failed-post-tool",
              "title": "Delete Failed Post Tool",
              "description": "Deletes a post that failed to publish. Only failed posts can be deleted with this tool. Use get-failed-posts to find the post_id. To retry a failed post instead, use reschedule-failed-post.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "post_id": {
                    "description": "The ID of the failed post to delete. Find it using get-failed-posts.",
                    "type": "integer"
                  }
                },
                "required": [
                  "post_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "message": {
                    "description": "Human-readable result message.",
                    "type": "string"
                  },
                  "success": {
                    "description": "Whether the failed post was deleted successfully.",
                    "type": "boolean"
                  }
                },
                "required": [
                  "success",
                  "message"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": true,
                "openWorldHint": false,
                "readOnlyHint": false
              }
            },
            {
              "name": "edit-post-tool",
              "title": "Edit Post Tool",
              "description": "Edits the title and/or content of an existing scheduled or draft post. Only scheduled (unpublished) and draft posts can be edited. Published posts CANNOT be edited. Failed posts CANNOT be edited - use reschedule-failed-post to retry them. Use the post_ids returned by schedule-text-post, schedule-image-post, or schedule-video-post, or use get-scheduled-posts or get-draft-posts to find the post_id.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "content": {
                    "description": "The new content/caption for the post.",
                    "type": "string"
                  },
                  "post_id": {
                    "description": "The ID of the scheduled or draft post to edit. Find it using get-scheduled-posts or get-draft-posts. Must NOT be a failed or published post - those cannot be edited.",
                    "type": "integer"
                  },
                  "title": {
                    "description": "Optional new title for the post (for YouTube, Reddit, and Threads posts).",
                    "type": "string"
                  }
                },
                "required": [
                  "post_id",
                  "content"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "message": {
                    "description": "Human-readable result message.",
                    "type": "string"
                  },
                  "success": {
                    "description": "Whether the post was updated successfully.",
                    "type": "boolean"
                  }
                },
                "required": [
                  "success",
                  "message"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": true,
                "openWorldHint": false,
                "readOnlyHint": false
              }
            },
            {
              "name": "reschedule-failed-post-tool",
              "title": "Reschedule Failed Post Tool",
              "description": "Reschedules a post that previously failed to publish. The scheduled time must be at least 5 minutes in the future. Use get-failed-posts to find the post_id.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "post_id": {
                    "description": "The ID of the failed post to reschedule. Find it using get-failed-posts.",
                    "type": "integer"
                  },
                  "scheduled_date_time": {
                    "description": "The new date and time for the post to be published. Format: YYYY-MM-DD HH:MM. Must be at least 5 minutes in the future.",
                    "type": "string"
                  }
                },
                "required": [
                  "post_id",
                  "scheduled_date_time"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "message": {
                    "description": "Human-readable result message.",
                    "type": "string"
                  },
                  "success": {
                    "description": "Whether the failed post was rescheduled successfully.",
                    "type": "boolean"
                  }
                },
                "required": [
                  "success",
                  "message"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": true,
                "openWorldHint": true,
                "readOnlyHint": false
              }
            },
            {
              "name": "fetch-top-comments-tool",
              "title": "Fetch Top Comments Tool",
              "description": "Read-only. Lists the user's published posts stored in OneUp together with their comments, sorted by the specified filter and optionally limited to one social account via social_account_id. Results are paginated with next_id. Each post includes the platform, post_id, and social_account_id used by reply-to-post-tool, and each comment includes the id used by fetch-comment-replies-tool and reply-to-comment-tool.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "filter": {
                    "description": "Sort order: \"recent_comment\" (default, posts with newest non-owner comments first), \"latest\" (newest posts first), or \"oldest\" (oldest posts first)",
                    "type": "string"
                  },
                  "next_id": {
                    "description": "Pagination offset. Omit for the first page. Use the next_id from the previous response to fetch the next page.",
                    "type": "integer"
                  },
                  "social_account_id": {
                    "description": "Return only posts (and comments) for this social account. Omit to include all accounts. Use list-social-accounts to get IDs. Only set this when the user asks for a specific account.",
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "next_id": {
                    "description": "Cursor for the next page, or null when there are no more results.",
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "posts": {
                    "description": "Posts and comments matching the requested filter.",
                    "items": {
                      "type": "object"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "posts",
                  "next_id"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "fetch-comment-replies-tool",
              "title": "Fetch Comment Replies Tool",
              "description": "Fetches existing child comments (replies) for a specific parent comment. This is read-only — to reply to a comment, use reply-to-comment-tool. Use the comment_id from fetch-top-comments to load the full reply thread.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "comment_id": {
                    "description": "The parent comment ID to fetch replies for",
                    "type": "string"
                  }
                },
                "required": [
                  "comment_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "replies": {
                    "description": "Replies to the selected parent comment.",
                    "items": {
                      "type": "object"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "replies"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "reply-to-post-tool",
              "title": "Reply To Post Tool",
              "description": "Publishes a new top-level comment on one of the user's social media posts, posted publicly as the selected social account. To reply to an existing comment instead, use reply-to-comment-tool. Get the platform, post_id, and social_account_id from fetch-top-comments-tool. Confirm the comment text with the user before calling.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "comment": {
                    "description": "The comment text to post",
                    "type": "string"
                  },
                  "platform": {
                    "description": "The social platform: facebook, instagram, tiktok, youtube, threads, linkedin, bluesky, or reddit",
                    "type": "string"
                  },
                  "post_id": {
                    "description": "The post ID to comment on",
                    "type": "string"
                  },
                  "social_account_id": {
                    "description": "The social account ID to comment as",
                    "type": "string"
                  }
                },
                "required": [
                  "platform",
                  "post_id",
                  "comment",
                  "social_account_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "comment": {
                    "description": "Comment data returned by OneUp.",
                    "type": [
                      "object",
                      "array"
                    ]
                  },
                  "message": {
                    "description": "Human-readable result message.",
                    "type": "string"
                  },
                  "success": {
                    "description": "Whether the comment was posted successfully.",
                    "type": "boolean"
                  }
                },
                "required": [
                  "success",
                  "message",
                  "comment"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": true,
                "readOnlyHint": false
              }
            },
            {
              "name": "reply-to-comment-tool",
              "title": "Reply To Comment Tool",
              "description": "Replies to an existing comment on a social media post. Use fetch-top-comments or fetch-comment-replies to get the parent_comment_id first.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "comment": {
                    "description": "The reply text",
                    "type": "string"
                  },
                  "parent_comment_id": {
                    "description": "The ID of the parent comment to reply to",
                    "type": "string"
                  },
                  "platform": {
                    "description": "The social platform: facebook, instagram, tiktok, youtube, threads, linkedin, bluesky, or reddit",
                    "type": "string"
                  },
                  "post_id": {
                    "description": "The post ID where the comment exists",
                    "type": "string"
                  },
                  "social_account_id": {
                    "description": "The social account ID to reply as",
                    "type": "string"
                  }
                },
                "required": [
                  "platform",
                  "post_id",
                  "parent_comment_id",
                  "comment",
                  "social_account_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "data": {
                    "description": "Reply data returned by OneUp.",
                    "type": [
                      "object",
                      "array"
                    ]
                  },
                  "message": {
                    "description": "Human-readable result message.",
                    "type": "string"
                  },
                  "success": {
                    "description": "Whether the reply was posted successfully.",
                    "type": "boolean"
                  }
                },
                "required": [
                  "success",
                  "message",
                  "data"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": true,
                "readOnlyHint": false
              }
            },
            {
              "name": "delete-comment-tool",
              "title": "Delete Comment Tool",
              "description": "Deletes a comment from a social media post. This action cannot be undone.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "comment_id": {
                    "description": "The ID of the comment to delete",
                    "type": "string"
                  },
                  "platform": {
                    "description": "The social platform: facebook, instagram, tiktok, youtube, linkedin, bluesky, or reddit",
                    "type": "string"
                  },
                  "post_id": {
                    "description": "The post ID where the comment exists",
                    "type": "string"
                  },
                  "social_account_id": {
                    "description": "The social account ID",
                    "type": "string"
                  }
                },
                "required": [
                  "platform",
                  "post_id",
                  "comment_id",
                  "social_account_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "data": {
                    "description": "Deletion data returned by OneUp.",
                    "type": [
                      "object",
                      "array"
                    ]
                  },
                  "message": {
                    "description": "Human-readable result message.",
                    "type": "string"
                  },
                  "success": {
                    "description": "Whether the comment was deleted successfully.",
                    "type": "boolean"
                  }
                },
                "required": [
                  "success",
                  "message",
                  "data"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": true,
                "openWorldHint": true,
                "readOnlyHint": false
              }
            },
            {
              "name": "force-refresh-comments-tool",
              "title": "Force Refresh Comments Tool",
              "description": "Triggers a manual refresh of comments from connected social platforms. Returns the refresh status: \"started\" (refresh initiated), \"already_in_progress\" (a refresh is currently running), or \"cooldown\" (recently refreshed — check remaining_seconds or next_refresh_available_at before retrying).",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "message": {
                    "description": "Human-readable refresh status message.",
                    "type": "string"
                  },
                  "next_refresh_available_at": {
                    "description": "Timestamp when another refresh may be started.",
                    "type": "string"
                  },
                  "remaining_seconds": {
                    "description": "Seconds remaining before another refresh may be started.",
                    "type": "integer"
                  },
                  "status": {
                    "description": "Current comment refresh status.",
                    "enum": [
                      "started",
                      "already_in_progress",
                      "cooldown"
                    ],
                    "type": "string"
                  }
                },
                "required": [
                  "status"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": false
              }
            },
            {
              "name": "fetch-conversations-tool",
              "title": "Fetch Conversations Tool",
              "description": "Fetches Social Inbox conversations for one user-selected Facebook, Instagram, or WhatsApp account. Before calling this tool, list the available accounts, show them to the user, and wait for the user to choose one. Never call this tool for multiple accounts in response to one broad inbox request. Side effect: if the account has not been synced to the OneUp inbox yet, this call starts a background sync in OneUp and returns retry_after_seconds; wait that long before calling this tool again. It does not mark messages as read or send anything.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "cursor": {
                    "description": "The next_cursor from the previous response",
                    "type": "string"
                  },
                  "per_page": {
                    "description": "Number of conversations to return. Defaults to 20.",
                    "maximum": 100,
                    "minimum": 1,
                    "type": "integer"
                  },
                  "platform": {
                    "description": "Limit conversations to one platform",
                    "enum": [
                      "facebook",
                      "instagram",
                      "whatsapp"
                    ],
                    "type": "string"
                  },
                  "search": {
                    "description": "Search message text and participant names",
                    "maxLength": 255,
                    "type": "string"
                  },
                  "social_account_id": {
                    "description": "The selected social account ID",
                    "maxLength": 255,
                    "type": "string"
                  },
                  "status": {
                    "description": "Conversation status filter. Defaults to open.",
                    "enum": [
                      "open",
                      "closed",
                      "spam",
                      "all"
                    ],
                    "type": "string"
                  }
                },
                "required": [
                  "social_account_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "data": {
                    "description": "Conversations, or null while account sync is pending.",
                    "items": {
                      "type": "object"
                    },
                    "type": [
                      "array",
                      "null"
                    ]
                  },
                  "error": {
                    "type": "boolean"
                  },
                  "message": {
                    "type": "string"
                  },
                  "meta": {
                    "description": "Pagination, sync, and refresh status.",
                    "type": [
                      "object",
                      "array"
                    ]
                  },
                  "retry_after_seconds": {
                    "description": "Seconds to wait before polling after a pending sync.",
                    "type": "integer"
                  }
                },
                "required": [
                  "message",
                  "error",
                  "data",
                  "meta"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": false
              }
            },
            {
              "name": "fetch-conversation-messages-tool",
              "title": "Fetch Conversation Messages Tool",
              "description": "Fetches messages for a Social Inbox conversation, newest first. Use the numeric id returned by fetch-conversations-tool, not the platform conversation_id. Reading messages does not mark them as read.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "cursor": {
                    "description": "The next_cursor from the previous response",
                    "type": "string"
                  },
                  "id": {
                    "description": "Internal conversation ID returned by fetch-conversations-tool",
                    "minimum": 1,
                    "type": "integer"
                  },
                  "per_page": {
                    "description": "Number of messages to return. Defaults to 20.",
                    "maximum": 100,
                    "minimum": 1,
                    "type": "integer"
                  }
                },
                "required": [
                  "id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "data": {
                    "description": "Conversation messages, or null while account sync is pending.",
                    "items": {
                      "type": "object"
                    },
                    "type": [
                      "array",
                      "null"
                    ]
                  },
                  "error": {
                    "type": "boolean"
                  },
                  "message": {
                    "type": "string"
                  },
                  "meta": {
                    "description": "Pagination or sync status.",
                    "type": [
                      "object",
                      "array"
                    ]
                  },
                  "retry_after_seconds": {
                    "description": "Seconds to wait before polling after a pending sync.",
                    "type": "integer"
                  }
                },
                "required": [
                  "message",
                  "error",
                  "data",
                  "meta"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "fetch-whats-app-accounts-tool",
              "title": "Fetch Whats App Accounts Tool",
              "description": "Fetches connected WhatsApp business phone numbers. Use the returned social_account_id with WhatsApp conversation, contact, and template tools.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "data": {
                    "description": "Connected WhatsApp business phone numbers.",
                    "items": {
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "error": {
                    "type": "boolean"
                  },
                  "message": {
                    "type": "string"
                  },
                  "meta": {
                    "type": [
                      "object",
                      "array"
                    ]
                  },
                  "retry_after_seconds": {
                    "description": "Seconds to wait before retrying.",
                    "type": "integer"
                  }
                },
                "required": [
                  "message",
                  "error",
                  "data",
                  "meta"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "fetch-whats-app-contacts-tool",
              "title": "Fetch Whats App Contacts Tool",
              "description": "Fetches saved WhatsApp contacts for one connected business phone number. Use the returned contact id with create-whats-app-conversation-tool.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "social_account_id": {
                    "description": "Connected WhatsApp business phone number ID",
                    "maxLength": 255,
                    "type": "string"
                  }
                },
                "required": [
                  "social_account_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "data": {
                    "description": "Saved WhatsApp contacts.",
                    "items": {
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "error": {
                    "type": "boolean"
                  },
                  "message": {
                    "type": "string"
                  },
                  "meta": {
                    "type": [
                      "object",
                      "array"
                    ]
                  },
                  "retry_after_seconds": {
                    "description": "Seconds to wait before retrying.",
                    "type": "integer"
                  }
                },
                "required": [
                  "message",
                  "error",
                  "data",
                  "meta"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "fetch-whats-app-templates-tool",
              "title": "Fetch Whats App Templates Tool",
              "description": "Fetches approved WhatsApp templates for one connected business phone number. Use the returned saved template id with create-whats-app-conversation-tool.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "social_account_id": {
                    "description": "Connected WhatsApp business phone number ID",
                    "maxLength": 255,
                    "type": "string"
                  }
                },
                "required": [
                  "social_account_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "data": {
                    "description": "Approved saved WhatsApp templates.",
                    "items": {
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "error": {
                    "type": "boolean"
                  },
                  "message": {
                    "type": "string"
                  },
                  "meta": {
                    "type": [
                      "object",
                      "array"
                    ]
                  },
                  "retry_after_seconds": {
                    "description": "Seconds to wait before retrying.",
                    "type": "integer"
                  }
                },
                "required": [
                  "message",
                  "error",
                  "data",
                  "meta"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "create-whats-app-conversation-tool",
              "title": "Create Whats App Conversation Tool",
              "description": "Starts or reopens a WhatsApp conversation by sending an approved template to a saved contact. Fetch the contact and template IDs first. Do not retry automatically after an uncertain send failure; inspect the conversation before sending again.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "social_account_id": {
                    "description": "Connected WhatsApp business phone number ID",
                    "maxLength": 255,
                    "type": "string"
                  },
                  "whatsapp_contact_id": {
                    "description": "Saved Inbox contact ID from fetch-whats-app-contacts-tool",
                    "minimum": 1,
                    "type": "integer"
                  },
                  "whatsapp_template_id": {
                    "description": "Saved approved template ID from fetch-whats-app-templates-tool",
                    "minimum": 1,
                    "type": "integer"
                  }
                },
                "required": [
                  "social_account_id",
                  "whatsapp_contact_id",
                  "whatsapp_template_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "data": {
                    "description": "Created conversation, saved template message, and provider outcome.",
                    "type": "object"
                  },
                  "error": {
                    "type": "boolean"
                  },
                  "message": {
                    "type": "string"
                  },
                  "meta": {
                    "type": [
                      "object",
                      "array"
                    ]
                  },
                  "retry_after_seconds": {
                    "description": "Seconds to wait before retrying.",
                    "type": "integer"
                  }
                },
                "required": [
                  "message",
                  "error",
                  "data",
                  "meta"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": true,
                "readOnlyHint": false
              }
            },
            {
              "name": "force-refresh-conversations-tool",
              "title": "Force Refresh Conversations Tool",
              "description": "Requests a refresh of recent Facebook or Instagram inbox conversations. This is asynchronous: wait retry_after_seconds, then use fetch-conversations-tool to check sync and refresh status. WhatsApp is updated by webhooks and cannot be refreshed here.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "limit": {
                    "description": "Number of recent conversations to refresh. Defaults to 20.",
                    "maximum": 100,
                    "minimum": 1,
                    "type": "integer"
                  },
                  "platform": {
                    "description": "The selected account platform",
                    "enum": [
                      "facebook",
                      "instagram"
                    ],
                    "type": "string"
                  },
                  "social_account_id": {
                    "description": "Selected Facebook or Instagram account ID",
                    "maxLength": 255,
                    "type": "string"
                  }
                },
                "required": [
                  "social_account_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "data": {
                    "description": "Refresh data, or null while account sync is pending.",
                    "type": [
                      "object",
                      "array",
                      "null"
                    ]
                  },
                  "error": {
                    "type": "boolean"
                  },
                  "message": {
                    "type": "string"
                  },
                  "meta": {
                    "description": "Sync and refresh status.",
                    "type": [
                      "object",
                      "array"
                    ]
                  },
                  "retry_after_seconds": {
                    "description": "Seconds to wait before checking refresh status.",
                    "type": "integer"
                  }
                },
                "required": [
                  "message",
                  "error",
                  "data",
                  "meta"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": false
              }
            },
            {
              "name": "load-more-conversations-tool",
              "title": "Load More Conversations Tool",
              "description": "Loads five more Facebook or Instagram conversations for one account. After it succeeds, call fetch-conversations-tool again without a cursor. WhatsApp conversations cannot use this tool.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "social_account_id": {
                    "description": "Selected Facebook or Instagram account ID",
                    "maxLength": 255,
                    "type": "string"
                  }
                },
                "required": [
                  "social_account_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "data": {
                    "description": "Previous, total, added, and requested conversation counts plus has_more.",
                    "type": "object"
                  },
                  "error": {
                    "type": "boolean"
                  },
                  "message": {
                    "type": "string"
                  },
                  "meta": {
                    "type": [
                      "object",
                      "array"
                    ]
                  },
                  "retry_after_seconds": {
                    "description": "Seconds to wait before retrying.",
                    "type": "integer"
                  }
                },
                "required": [
                  "message",
                  "error",
                  "data",
                  "meta"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": false
              }
            },
            {
              "name": "send-message-tool",
              "title": "Send Message Tool",
              "description": "Sends a text reply in a Social Inbox conversation. WhatsApp replies require a customer message within the last 24 hours. Do not retry automatically after an uncertain failure; inspect the conversation before sending again.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "id": {
                    "description": "Internal conversation ID returned by fetch-conversations-tool",
                    "minimum": 1,
                    "type": "integer"
                  },
                  "message": {
                    "description": "Reply text",
                    "maxLength": 4096,
                    "minLength": 1,
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "message"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "data": {
                    "description": "Saved message and provider outcome, or null while account sync is pending.",
                    "type": [
                      "object",
                      "null"
                    ]
                  },
                  "error": {
                    "type": "boolean"
                  },
                  "message": {
                    "type": "string"
                  },
                  "meta": {
                    "description": "Sync status when setup is pending.",
                    "type": [
                      "object",
                      "array"
                    ]
                  },
                  "retry_after_seconds": {
                    "description": "Seconds to wait before retrying after pending account setup.",
                    "type": "integer"
                  }
                },
                "required": [
                  "message",
                  "error",
                  "data",
                  "meta"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": true,
                "readOnlyHint": false
              }
            },
            {
              "name": "mark-conversation-read-tool",
              "title": "Mark Conversation Read Tool",
              "description": "Marks unread incoming messages in a Social Inbox conversation as read without sending a platform read receipt. Use the numeric id from fetch-conversations-tool.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "id": {
                    "description": "Internal conversation ID returned by fetch-conversations-tool",
                    "minimum": 1,
                    "type": "integer"
                  }
                },
                "required": [
                  "id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "data": {
                    "description": "Number of messages marked read, or null while account sync is pending.",
                    "type": [
                      "object",
                      "null"
                    ]
                  },
                  "error": {
                    "type": "boolean"
                  },
                  "message": {
                    "type": "string"
                  },
                  "meta": {
                    "description": "Sync status when setup is pending.",
                    "type": [
                      "object",
                      "array"
                    ]
                  },
                  "retry_after_seconds": {
                    "description": "Seconds to wait before retrying after pending account setup.",
                    "type": "integer"
                  }
                },
                "required": [
                  "message",
                  "error",
                  "data",
                  "meta"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": false
              }
            },
            {
              "name": "update-conversation-status-tool",
              "title": "Update Conversation Status Tool",
              "description": "Changes a Social Inbox conversation status to open, closed, or spam. Use the numeric id returned by fetch-conversations-tool.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "id": {
                    "description": "Internal conversation ID returned by fetch-conversations-tool",
                    "minimum": 1,
                    "type": "integer"
                  },
                  "status": {
                    "description": "New conversation status",
                    "enum": [
                      "open",
                      "closed",
                      "spam"
                    ],
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "status"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "data": {
                    "description": "Updated conversation, or null while account sync is pending.",
                    "type": [
                      "object",
                      "null"
                    ]
                  },
                  "error": {
                    "type": "boolean"
                  },
                  "message": {
                    "type": "string"
                  },
                  "meta": {
                    "description": "Sync status when setup is pending.",
                    "type": [
                      "object",
                      "array"
                    ]
                  },
                  "retry_after_seconds": {
                    "description": "Seconds to wait before retrying after pending account setup.",
                    "type": "integer"
                  }
                },
                "required": [
                  "message",
                  "error",
                  "data",
                  "meta"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": false
              }
            },
            {
              "name": "force-refresh-analytics-tool",
              "title": "Force Refresh Analytics Tool",
              "description": "Refreshes analytics for all supported connected accounts. This asynchronous action returns status and progress, not analytics data. Call it again after retry_after_seconds while next_action is poll_force_fetch; retrieve analytics when next_action is retrieve_analytics.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  }
                },
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "batch_id": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "failed_jobs": {
                    "type": "integer"
                  },
                  "is_fetching": {
                    "type": "boolean"
                  },
                  "last_fetched_at": {
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  },
                  "next_action": {
                    "enum": [
                      "poll_force_fetch",
                      "retrieve_analytics",
                      "retry_refresh",
                      "connect_account"
                    ],
                    "type": "string"
                  },
                  "pending_jobs": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  },
                  "percentage": {
                    "type": "integer"
                  },
                  "processed_jobs": {
                    "type": "integer"
                  },
                  "remaining_seconds": {
                    "type": "integer"
                  },
                  "retry_after_seconds": {
                    "type": "integer"
                  },
                  "status": {
                    "enum": [
                      "syncing_accounts",
                      "started",
                      "already_in_progress",
                      "completed",
                      "completed_with_errors",
                      "no_accounts",
                      "interrupted"
                    ],
                    "type": "string"
                  },
                  "total_jobs": {
                    "type": [
                      "integer",
                      "null"
                    ]
                  }
                },
                "required": [
                  "status",
                  "message",
                  "is_fetching",
                  "next_action"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": false
              }
            },
            {
              "name": "get-facebook-overview-tool",
              "title": "Get Facebook Overview Tool",
              "description": "Retrieves Facebook page overview analytics including post counts, page views, impressions, reach, reactions, engagements, and new followers with period comparison and top/bottom performing posts. Set separate_stories to true to report stories as their own metric instead of counting them as posts.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "end_date": {
                    "description": "End date in Y-m-d format (required if no preset). Must be on or after start_date and no later than yesterday (UTC).",
                    "type": "string"
                  },
                  "preset": {
                    "description": "Date range preset: \"last_7_days\", \"last_30_days\", or \"last_90_days\"",
                    "type": "string"
                  },
                  "separate_stories": {
                    "description": "When true, stories are counted separately in a \"stories\" metric and \"posts\" only includes posts and reels. When false (default), stories are combined into posts.",
                    "type": "boolean"
                  },
                  "social_network_id": {
                    "description": "The social network account ID for a SINGLE account only. You MUST ask the user to choose exactly one account before calling this tool. Do NOT call this for multiple accounts in parallel.",
                    "type": "string"
                  },
                  "start_date": {
                    "description": "Start date in Y-m-d format (required if no preset)",
                    "type": "string"
                  },
                  "timezone": {
                    "description": "PHP timezone identifier (e.g., \"America/New_York\")",
                    "type": "string"
                  }
                },
                "required": [
                  "social_network_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "data": {
                    "description": "Analytics data returned by OneUp for the selected account and date range.",
                    "type": [
                      "object",
                      "array"
                    ]
                  }
                },
                "required": [
                  "data"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "get-facebook-posts-tool",
              "title": "Get Facebook Posts Tool",
              "description": "Retrieves analytics for individual Facebook posts (excludes reels and stories) including reactions, comments, shares, clicks, and hashtag performance.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "end_date": {
                    "description": "End date in Y-m-d format (required if no preset). Must be on or after start_date and no later than yesterday (UTC).",
                    "type": "string"
                  },
                  "preset": {
                    "description": "Date range preset: \"last_7_days\", \"last_30_days\", or \"last_90_days\"",
                    "type": "string"
                  },
                  "social_network_id": {
                    "description": "The social network account ID for a SINGLE account only. You MUST ask the user to choose exactly one account before calling this tool. Do NOT call this for multiple accounts in parallel.",
                    "type": "string"
                  },
                  "start_date": {
                    "description": "Start date in Y-m-d format (required if no preset)",
                    "type": "string"
                  },
                  "timezone": {
                    "description": "PHP timezone identifier (e.g., \"America/New_York\")",
                    "type": "string"
                  }
                },
                "required": [
                  "social_network_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "data": {
                    "description": "Analytics data returned by OneUp for the selected account and date range.",
                    "type": [
                      "object",
                      "array"
                    ]
                  }
                },
                "required": [
                  "data"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "get-facebook-reels-tool",
              "title": "Get Facebook Reels Tool",
              "description": "Retrieves analytics for Facebook reels only, including total plays, video followers, reactions, and social actions.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "end_date": {
                    "description": "End date in Y-m-d format (required if no preset). Must be on or after start_date and no later than yesterday (UTC).",
                    "type": "string"
                  },
                  "preset": {
                    "description": "Date range preset: \"last_7_days\", \"last_30_days\", or \"last_90_days\"",
                    "type": "string"
                  },
                  "social_network_id": {
                    "description": "The social network account ID for a SINGLE account only. You MUST ask the user to choose exactly one account before calling this tool. Do NOT call this for multiple accounts in parallel.",
                    "type": "string"
                  },
                  "start_date": {
                    "description": "Start date in Y-m-d format (required if no preset)",
                    "type": "string"
                  },
                  "timezone": {
                    "description": "PHP timezone identifier (e.g., \"America/New_York\")",
                    "type": "string"
                  }
                },
                "required": [
                  "social_network_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "data": {
                    "description": "Analytics data returned by OneUp for the selected account and date range.",
                    "type": [
                      "object",
                      "array"
                    ]
                  }
                },
                "required": [
                  "data"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "get-facebook-stories-tool",
              "title": "Get Facebook Stories Tool",
              "description": "Retrieves analytics for Facebook stories only, including media views, unique views, impressions, interactions, replies, and shares.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "end_date": {
                    "description": "End date in Y-m-d format (required if no preset). Must be on or after start_date and no later than yesterday (UTC).",
                    "type": "string"
                  },
                  "preset": {
                    "description": "Date range preset: \"last_7_days\", \"last_30_days\", or \"last_90_days\"",
                    "type": "string"
                  },
                  "social_network_id": {
                    "description": "The social network account ID for a SINGLE account only. You MUST ask the user to choose exactly one account before calling this tool. Do NOT call this for multiple accounts in parallel.",
                    "type": "string"
                  },
                  "start_date": {
                    "description": "Start date in Y-m-d format (required if no preset)",
                    "type": "string"
                  },
                  "timezone": {
                    "description": "PHP timezone identifier (e.g., \"America/New_York\")",
                    "type": "string"
                  }
                },
                "required": [
                  "social_network_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "data": {
                    "description": "Analytics data returned by OneUp for the selected account and date range.",
                    "type": [
                      "object",
                      "array"
                    ]
                  }
                },
                "required": [
                  "data"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "get-facebook-demographics-tool",
              "title": "Get Facebook Demographics Tool",
              "description": "Retrieves Facebook audience demographics by city and country with follower volume and growth metrics.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "end_date": {
                    "description": "End date in Y-m-d format (required if no preset). Must be on or after start_date and no later than yesterday (UTC).",
                    "type": "string"
                  },
                  "preset": {
                    "description": "Date range preset: \"last_7_days\", \"last_30_days\", or \"last_90_days\"",
                    "type": "string"
                  },
                  "social_network_id": {
                    "description": "The social network account ID for a SINGLE account only. You MUST ask the user to choose exactly one account before calling this tool. Do NOT call this for multiple accounts in parallel.",
                    "type": "string"
                  },
                  "start_date": {
                    "description": "Start date in Y-m-d format (required if no preset)",
                    "type": "string"
                  },
                  "timezone": {
                    "description": "PHP timezone identifier (e.g., \"America/New_York\")",
                    "type": "string"
                  }
                },
                "required": [
                  "social_network_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "data": {
                    "description": "Analytics data returned by OneUp for the selected account and date range.",
                    "type": [
                      "object",
                      "array"
                    ]
                  }
                },
                "required": [
                  "data"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "get-instagram-overview-tool",
              "title": "Get Instagram Overview Tool",
              "description": "Retrieves Instagram account overview analytics including post counts, reach, new followers, likes, comments, shares, and profile views with period comparison and top/bottom performing posts. Set separate_stories to true to report stories as their own metric instead of counting them as posts.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "end_date": {
                    "description": "End date in Y-m-d format (required if no preset). Must be on or after start_date and no later than yesterday (UTC).",
                    "type": "string"
                  },
                  "preset": {
                    "description": "Date range preset: \"last_7_days\", \"last_30_days\", or \"last_90_days\"",
                    "type": "string"
                  },
                  "separate_stories": {
                    "description": "When true, stories are counted separately in a \"stories\" metric and \"posts\" only includes posts and reels. When false (default), stories are combined into posts.",
                    "type": "boolean"
                  },
                  "social_network_id": {
                    "description": "The social network account ID for a SINGLE account only. You MUST ask the user to choose exactly one account before calling this tool. Do NOT call this for multiple accounts in parallel.",
                    "type": "string"
                  },
                  "start_date": {
                    "description": "Start date in Y-m-d format (required if no preset)",
                    "type": "string"
                  },
                  "timezone": {
                    "description": "PHP timezone identifier (e.g., \"America/New_York\")",
                    "type": "string"
                  }
                },
                "required": [
                  "social_network_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "data": {
                    "description": "Analytics data returned by OneUp for the selected account and date range.",
                    "type": [
                      "object",
                      "array"
                    ]
                  }
                },
                "required": [
                  "data"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "get-instagram-posts-tool",
              "title": "Get Instagram Posts Tool",
              "description": "Retrieves analytics for individual Instagram posts (excludes stories) including reach, likes, comments, shares, reposts, reels skip rate, and crossposted views.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "end_date": {
                    "description": "End date in Y-m-d format (required if no preset). Must be on or after start_date and no later than yesterday (UTC).",
                    "type": "string"
                  },
                  "preset": {
                    "description": "Date range preset: \"last_7_days\", \"last_30_days\", or \"last_90_days\"",
                    "type": "string"
                  },
                  "social_network_id": {
                    "description": "The social network account ID for a SINGLE account only. You MUST ask the user to choose exactly one account before calling this tool. Do NOT call this for multiple accounts in parallel.",
                    "type": "string"
                  },
                  "start_date": {
                    "description": "Start date in Y-m-d format (required if no preset)",
                    "type": "string"
                  },
                  "timezone": {
                    "description": "PHP timezone identifier (e.g., \"America/New_York\")",
                    "type": "string"
                  }
                },
                "required": [
                  "social_network_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "data": {
                    "description": "Analytics data returned by OneUp for the selected account and date range.",
                    "type": [
                      "object",
                      "array"
                    ]
                  }
                },
                "required": [
                  "data"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "get-instagram-stories-tool",
              "title": "Get Instagram Stories Tool",
              "description": "Retrieves analytics for Instagram stories only, including reach, views, replies, shares, interactions, navigation, and profile visits.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "end_date": {
                    "description": "End date in Y-m-d format (required if no preset). Must be on or after start_date and no later than yesterday (UTC).",
                    "type": "string"
                  },
                  "preset": {
                    "description": "Date range preset: \"last_7_days\", \"last_30_days\", or \"last_90_days\"",
                    "type": "string"
                  },
                  "social_network_id": {
                    "description": "The social network account ID for a SINGLE account only. You MUST ask the user to choose exactly one account before calling this tool. Do NOT call this for multiple accounts in parallel.",
                    "type": "string"
                  },
                  "start_date": {
                    "description": "Start date in Y-m-d format (required if no preset)",
                    "type": "string"
                  },
                  "timezone": {
                    "description": "PHP timezone identifier (e.g., \"America/New_York\")",
                    "type": "string"
                  }
                },
                "required": [
                  "social_network_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "data": {
                    "description": "Analytics data returned by OneUp for the selected account and date range.",
                    "type": [
                      "object",
                      "array"
                    ]
                  }
                },
                "required": [
                  "data"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "get-instagram-demographics-tool",
              "title": "Get Instagram Demographics Tool",
              "description": "Retrieves Instagram follower and engaged audience demographics by age, gender, city, and country.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "end_date": {
                    "description": "End date in Y-m-d format (required if no preset). Must be on or after start_date and no later than yesterday (UTC).",
                    "type": "string"
                  },
                  "preset": {
                    "description": "Date range preset: \"last_7_days\", \"last_30_days\", or \"last_90_days\"",
                    "type": "string"
                  },
                  "social_network_id": {
                    "description": "The social network account ID for a SINGLE account only. You MUST ask the user to choose exactly one account before calling this tool. Do NOT call this for multiple accounts in parallel.",
                    "type": "string"
                  },
                  "start_date": {
                    "description": "Start date in Y-m-d format (required if no preset)",
                    "type": "string"
                  },
                  "timezone": {
                    "description": "PHP timezone identifier (e.g., \"America/New_York\")",
                    "type": "string"
                  }
                },
                "required": [
                  "social_network_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "data": {
                    "description": "Analytics data returned by OneUp for the selected account and date range.",
                    "type": [
                      "object",
                      "array"
                    ]
                  }
                },
                "required": [
                  "data"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "get-linked-in-overview-tool",
              "title": "Get Linked In Overview Tool",
              "description": "Retrieves LinkedIn account overview analytics. Auto-detects organization vs personal accounts — organization returns post performance, personal returns limited metrics.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "end_date": {
                    "description": "End date in Y-m-d format (required if no preset). Must be on or after start_date and no later than yesterday (UTC).",
                    "type": "string"
                  },
                  "preset": {
                    "description": "Date range preset: \"last_7_days\", \"last_30_days\", or \"last_90_days\"",
                    "type": "string"
                  },
                  "social_network_id": {
                    "description": "The social network account ID for a SINGLE account only. You MUST ask the user to choose exactly one account before calling this tool. Do NOT call this for multiple accounts in parallel.",
                    "type": "string"
                  },
                  "start_date": {
                    "description": "Start date in Y-m-d format (required if no preset)",
                    "type": "string"
                  },
                  "timezone": {
                    "description": "PHP timezone identifier (e.g., \"America/New_York\")",
                    "type": "string"
                  }
                },
                "required": [
                  "social_network_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "data": {
                    "description": "Analytics data returned by OneUp for the selected account and date range.",
                    "type": [
                      "object",
                      "array"
                    ]
                  }
                },
                "required": [
                  "data"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "get-linked-in-posts-tool",
              "title": "Get Linked In Posts Tool",
              "description": "Retrieves analytics for individual LinkedIn posts (organization accounts only). Personal profiles are not supported due to LinkedIn API limitations.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "end_date": {
                    "description": "End date in Y-m-d format (required if no preset). Must be on or after start_date and no later than yesterday (UTC).",
                    "type": "string"
                  },
                  "preset": {
                    "description": "Date range preset: \"last_7_days\", \"last_30_days\", or \"last_90_days\"",
                    "type": "string"
                  },
                  "social_network_id": {
                    "description": "The social network account ID for a SINGLE account only. You MUST ask the user to choose exactly one account before calling this tool. Do NOT call this for multiple accounts in parallel.",
                    "type": "string"
                  },
                  "start_date": {
                    "description": "Start date in Y-m-d format (required if no preset)",
                    "type": "string"
                  },
                  "timezone": {
                    "description": "PHP timezone identifier (e.g., \"America/New_York\")",
                    "type": "string"
                  }
                },
                "required": [
                  "social_network_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "data": {
                    "description": "Analytics data returned by OneUp for the selected account and date range.",
                    "type": [
                      "object",
                      "array"
                    ]
                  }
                },
                "required": [
                  "data"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "get-gbp-overview-tool",
              "title": "Get Gbp Overview Tool",
              "description": "Retrieves Google Business Profile overview analytics including views, search appearances, interactions, calls, direction requests, and website clicks with period comparison.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "end_date": {
                    "description": "End date in Y-m-d format (required if no preset). Must be on or after start_date and no later than yesterday (UTC).",
                    "type": "string"
                  },
                  "preset": {
                    "description": "Date range preset: \"last_7_days\", \"last_30_days\", or \"last_90_days\"",
                    "type": "string"
                  },
                  "social_network_id": {
                    "description": "The social network account ID for a SINGLE account only. You MUST ask the user to choose exactly one account before calling this tool. Do NOT call this for multiple accounts in parallel.",
                    "type": "string"
                  },
                  "start_date": {
                    "description": "Start date in Y-m-d format (required if no preset)",
                    "type": "string"
                  },
                  "timezone": {
                    "description": "PHP timezone identifier (e.g., \"America/New_York\")",
                    "type": "string"
                  }
                },
                "required": [
                  "social_network_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "data": {
                    "description": "Analytics data returned by OneUp for the selected account and date range.",
                    "type": [
                      "object",
                      "array"
                    ]
                  }
                },
                "required": [
                  "data"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "get-gbp-posts-tool",
              "title": "Get Gbp Posts Tool",
              "description": "Retrieves analytics for individual Google Business Profile posts including views and clicks.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "end_date": {
                    "description": "End date in Y-m-d format (required if no preset). Must be on or after start_date and no later than yesterday (UTC).",
                    "type": "string"
                  },
                  "preset": {
                    "description": "Date range preset: \"last_7_days\", \"last_30_days\", or \"last_90_days\"",
                    "type": "string"
                  },
                  "social_network_id": {
                    "description": "The social network account ID for a SINGLE account only. You MUST ask the user to choose exactly one account before calling this tool. Do NOT call this for multiple accounts in parallel.",
                    "type": "string"
                  },
                  "start_date": {
                    "description": "Start date in Y-m-d format (required if no preset)",
                    "type": "string"
                  },
                  "timezone": {
                    "description": "PHP timezone identifier (e.g., \"America/New_York\")",
                    "type": "string"
                  }
                },
                "required": [
                  "social_network_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "data": {
                    "description": "Analytics data returned by OneUp for the selected account and date range.",
                    "type": [
                      "object",
                      "array"
                    ]
                  }
                },
                "required": [
                  "data"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "get-gbp-reviews-tool",
              "title": "Get Gbp Reviews Tool",
              "description": "Retrieves Google Business Profile reviews including ratings, review text, and reviewer information with average rating and distribution.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "end_date": {
                    "description": "End date in Y-m-d format (required if no preset). Must be on or after start_date and no later than yesterday (UTC).",
                    "type": "string"
                  },
                  "preset": {
                    "description": "Date range preset: \"last_7_days\", \"last_30_days\", or \"last_90_days\"",
                    "type": "string"
                  },
                  "social_network_id": {
                    "description": "The social network account ID for a SINGLE account only. You MUST ask the user to choose exactly one account before calling this tool. Do NOT call this for multiple accounts in parallel.",
                    "type": "string"
                  },
                  "start_date": {
                    "description": "Start date in Y-m-d format (required if no preset)",
                    "type": "string"
                  },
                  "timezone": {
                    "description": "PHP timezone identifier (e.g., \"America/New_York\")",
                    "type": "string"
                  }
                },
                "required": [
                  "social_network_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "data": {
                    "description": "Analytics data returned by OneUp for the selected account and date range.",
                    "type": [
                      "object",
                      "array"
                    ]
                  }
                },
                "required": [
                  "data"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "get-meta-ads-overview-tool",
              "title": "Get Meta Ads Overview Tool",
              "description": "Retrieves Meta Ads account overview analytics including impressions, reach, clicks, spend, CPC, and CTR with period comparison.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "end_date": {
                    "description": "End date in Y-m-d format (required if no preset). Must be on or after start_date and no later than yesterday (UTC).",
                    "type": "string"
                  },
                  "preset": {
                    "description": "Date range preset: \"last_7_days\", \"last_30_days\", or \"last_90_days\"",
                    "type": "string"
                  },
                  "social_network_id": {
                    "description": "The social network account ID for a SINGLE account only. You MUST ask the user to choose exactly one account before calling this tool. Do NOT call this for multiple accounts in parallel.",
                    "type": "string"
                  },
                  "start_date": {
                    "description": "Start date in Y-m-d format (required if no preset)",
                    "type": "string"
                  },
                  "timezone": {
                    "description": "PHP timezone identifier (e.g., \"America/New_York\")",
                    "type": "string"
                  }
                },
                "required": [
                  "social_network_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "data": {
                    "description": "Analytics data returned by OneUp for the selected account and date range.",
                    "type": [
                      "object",
                      "array"
                    ]
                  }
                },
                "required": [
                  "data"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "get-meta-ads-campaigns-tool",
              "title": "Get Meta Ads Campaigns Tool",
              "description": "Retrieves analytics for Meta Ads campaigns including impressions, clicks, spend, and individual campaign performance.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "end_date": {
                    "description": "End date in Y-m-d format (required if no preset). Must be on or after start_date and no later than yesterday (UTC).",
                    "type": "string"
                  },
                  "preset": {
                    "description": "Date range preset: \"last_7_days\", \"last_30_days\", or \"last_90_days\"",
                    "type": "string"
                  },
                  "social_network_id": {
                    "description": "The social network account ID for a SINGLE account only. You MUST ask the user to choose exactly one account before calling this tool. Do NOT call this for multiple accounts in parallel.",
                    "type": "string"
                  },
                  "start_date": {
                    "description": "Start date in Y-m-d format (required if no preset)",
                    "type": "string"
                  },
                  "timezone": {
                    "description": "PHP timezone identifier (e.g., \"America/New_York\")",
                    "type": "string"
                  }
                },
                "required": [
                  "social_network_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "data": {
                    "description": "Analytics data returned by OneUp for the selected account and date range.",
                    "type": [
                      "object",
                      "array"
                    ]
                  }
                },
                "required": [
                  "data"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "get-meta-ads-ad-sets-tool",
              "title": "Get Meta Ads Ad Sets Tool",
              "description": "Retrieves analytics for Meta Ads ad sets including impressions, clicks, spend, and individual ad set performance with campaign hierarchy.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "end_date": {
                    "description": "End date in Y-m-d format (required if no preset). Must be on or after start_date and no later than yesterday (UTC).",
                    "type": "string"
                  },
                  "preset": {
                    "description": "Date range preset: \"last_7_days\", \"last_30_days\", or \"last_90_days\"",
                    "type": "string"
                  },
                  "social_network_id": {
                    "description": "The social network account ID for a SINGLE account only. You MUST ask the user to choose exactly one account before calling this tool. Do NOT call this for multiple accounts in parallel.",
                    "type": "string"
                  },
                  "start_date": {
                    "description": "Start date in Y-m-d format (required if no preset)",
                    "type": "string"
                  },
                  "timezone": {
                    "description": "PHP timezone identifier (e.g., \"America/New_York\")",
                    "type": "string"
                  }
                },
                "required": [
                  "social_network_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "data": {
                    "description": "Analytics data returned by OneUp for the selected account and date range.",
                    "type": [
                      "object",
                      "array"
                    ]
                  }
                },
                "required": [
                  "data"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "get-meta-ads-ads-tool",
              "title": "Get Meta Ads Ads Tool",
              "description": "Retrieves analytics for individual Meta Ads including impressions, clicks, spend, and individual ad performance with campaign and ad set hierarchy.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "end_date": {
                    "description": "End date in Y-m-d format (required if no preset). Must be on or after start_date and no later than yesterday (UTC).",
                    "type": "string"
                  },
                  "preset": {
                    "description": "Date range preset: \"last_7_days\", \"last_30_days\", or \"last_90_days\"",
                    "type": "string"
                  },
                  "social_network_id": {
                    "description": "The social network account ID for a SINGLE account only. You MUST ask the user to choose exactly one account before calling this tool. Do NOT call this for multiple accounts in parallel.",
                    "type": "string"
                  },
                  "start_date": {
                    "description": "Start date in Y-m-d format (required if no preset)",
                    "type": "string"
                  },
                  "timezone": {
                    "description": "PHP timezone identifier (e.g., \"America/New_York\")",
                    "type": "string"
                  }
                },
                "required": [
                  "social_network_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "data": {
                    "description": "Analytics data returned by OneUp for the selected account and date range.",
                    "type": [
                      "object",
                      "array"
                    ]
                  }
                },
                "required": [
                  "data"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "get-tiktok-overview-tool",
              "title": "Get Tiktok Overview Tool",
              "description": "Retrieves TikTok account overview analytics including post counts, views, likes, comments, shares, saves, and total followers with period comparison.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "end_date": {
                    "description": "End date in Y-m-d format (required if no preset). Must be on or after start_date and no later than yesterday (UTC).",
                    "type": "string"
                  },
                  "preset": {
                    "description": "Date range preset: \"last_7_days\", \"last_30_days\", or \"last_90_days\"",
                    "type": "string"
                  },
                  "social_network_id": {
                    "description": "The social network account ID for a SINGLE account only. You MUST ask the user to choose exactly one account before calling this tool. Do NOT call this for multiple accounts in parallel.",
                    "type": "string"
                  },
                  "start_date": {
                    "description": "Start date in Y-m-d format (required if no preset)",
                    "type": "string"
                  },
                  "timezone": {
                    "description": "PHP timezone identifier (e.g., \"America/New_York\")",
                    "type": "string"
                  }
                },
                "required": [
                  "social_network_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "data": {
                    "description": "Analytics data returned by OneUp for the selected account and date range.",
                    "type": [
                      "object",
                      "array"
                    ]
                  }
                },
                "required": [
                  "data"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "get-tiktok-posts-tool",
              "title": "Get Tiktok Posts Tool",
              "description": "Retrieves analytics for individual TikTok posts including views, likes, comments, shares, and saves with per-post performance.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "end_date": {
                    "description": "End date in Y-m-d format (required if no preset). Must be on or after start_date and no later than yesterday (UTC).",
                    "type": "string"
                  },
                  "preset": {
                    "description": "Date range preset: \"last_7_days\", \"last_30_days\", or \"last_90_days\"",
                    "type": "string"
                  },
                  "social_network_id": {
                    "description": "The social network account ID for a SINGLE account only. You MUST ask the user to choose exactly one account before calling this tool. Do NOT call this for multiple accounts in parallel.",
                    "type": "string"
                  },
                  "start_date": {
                    "description": "Start date in Y-m-d format (required if no preset)",
                    "type": "string"
                  },
                  "timezone": {
                    "description": "PHP timezone identifier (e.g., \"America/New_York\")",
                    "type": "string"
                  }
                },
                "required": [
                  "social_network_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "data": {
                    "description": "Analytics data returned by OneUp for the selected account and date range.",
                    "type": [
                      "object",
                      "array"
                    ]
                  }
                },
                "required": [
                  "data"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "get-tiktok-demographics-tool",
              "title": "Get Tiktok Demographics Tool",
              "description": "Retrieves TikTok audience demographics by age groups, gender, countries, and cities.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "end_date": {
                    "description": "End date in Y-m-d format (required if no preset). Must be on or after start_date and no later than yesterday (UTC).",
                    "type": "string"
                  },
                  "preset": {
                    "description": "Date range preset: \"last_7_days\", \"last_30_days\", or \"last_90_days\"",
                    "type": "string"
                  },
                  "social_network_id": {
                    "description": "The social network account ID for a SINGLE account only. You MUST ask the user to choose exactly one account before calling this tool. Do NOT call this for multiple accounts in parallel.",
                    "type": "string"
                  },
                  "start_date": {
                    "description": "Start date in Y-m-d format (required if no preset)",
                    "type": "string"
                  },
                  "timezone": {
                    "description": "PHP timezone identifier (e.g., \"America/New_York\")",
                    "type": "string"
                  }
                },
                "required": [
                  "social_network_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "data": {
                    "description": "Analytics data returned by OneUp for the selected account and date range.",
                    "type": [
                      "object",
                      "array"
                    ]
                  }
                },
                "required": [
                  "data"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "get-youtube-overview-tool",
              "title": "Get Youtube Overview Tool",
              "description": "Retrieves YouTube channel overview analytics including post counts, views, watch time, likes, comments, shares, and total subscribers with period comparison.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "end_date": {
                    "description": "End date in Y-m-d format (required if no preset). Must be on or after start_date and no later than yesterday (UTC).",
                    "type": "string"
                  },
                  "preset": {
                    "description": "Date range preset: \"last_7_days\", \"last_30_days\", or \"last_90_days\"",
                    "type": "string"
                  },
                  "social_network_id": {
                    "description": "The social network account ID for a SINGLE account only. You MUST ask the user to choose exactly one account before calling this tool. Do NOT call this for multiple accounts in parallel.",
                    "type": "string"
                  },
                  "start_date": {
                    "description": "Start date in Y-m-d format (required if no preset)",
                    "type": "string"
                  },
                  "timezone": {
                    "description": "PHP timezone identifier (e.g., \"America/New_York\")",
                    "type": "string"
                  }
                },
                "required": [
                  "social_network_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "data": {
                    "description": "Analytics data returned by OneUp for the selected account and date range.",
                    "type": [
                      "object",
                      "array"
                    ]
                  }
                },
                "required": [
                  "data"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "get-youtube-posts-tool",
              "title": "Get Youtube Posts Tool",
              "description": "Retrieves analytics for individual YouTube posts including views, watch time, likes, comments, shares, and per-post performance.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "end_date": {
                    "description": "End date in Y-m-d format (required if no preset). Must be on or after start_date and no later than yesterday (UTC).",
                    "type": "string"
                  },
                  "preset": {
                    "description": "Date range preset: \"last_7_days\", \"last_30_days\", or \"last_90_days\"",
                    "type": "string"
                  },
                  "social_network_id": {
                    "description": "The social network account ID for a SINGLE account only. You MUST ask the user to choose exactly one account before calling this tool. Do NOT call this for multiple accounts in parallel.",
                    "type": "string"
                  },
                  "start_date": {
                    "description": "Start date in Y-m-d format (required if no preset)",
                    "type": "string"
                  },
                  "timezone": {
                    "description": "PHP timezone identifier (e.g., \"America/New_York\")",
                    "type": "string"
                  }
                },
                "required": [
                  "social_network_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "data": {
                    "description": "Analytics data returned by OneUp for the selected account and date range.",
                    "type": [
                      "object",
                      "array"
                    ]
                  }
                },
                "required": [
                  "data"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "get-youtube-demographics-tool",
              "title": "Get Youtube Demographics Tool",
              "description": "Retrieves YouTube audience demographics by age groups and gender.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "end_date": {
                    "description": "End date in Y-m-d format (required if no preset). Must be on or after start_date and no later than yesterday (UTC).",
                    "type": "string"
                  },
                  "preset": {
                    "description": "Date range preset: \"last_7_days\", \"last_30_days\", or \"last_90_days\"",
                    "type": "string"
                  },
                  "social_network_id": {
                    "description": "The social network account ID for a SINGLE account only. You MUST ask the user to choose exactly one account before calling this tool. Do NOT call this for multiple accounts in parallel.",
                    "type": "string"
                  },
                  "start_date": {
                    "description": "Start date in Y-m-d format (required if no preset)",
                    "type": "string"
                  },
                  "timezone": {
                    "description": "PHP timezone identifier (e.g., \"America/New_York\")",
                    "type": "string"
                  }
                },
                "required": [
                  "social_network_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "data": {
                    "description": "Analytics data returned by OneUp for the selected account and date range.",
                    "type": [
                      "object",
                      "array"
                    ]
                  }
                },
                "required": [
                  "data"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "get-snapchat-overview-tool",
              "title": "Get Snapchat Overview Tool",
              "description": "Retrieves Snapchat account overview analytics including post counts, views, likes, comments, shares, screenshots, and total followers with period comparison.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "end_date": {
                    "description": "End date in Y-m-d format (required if no preset). Must be on or after start_date and no later than yesterday (UTC).",
                    "type": "string"
                  },
                  "preset": {
                    "description": "Date range preset: \"last_7_days\", \"last_30_days\", or \"last_90_days\"",
                    "type": "string"
                  },
                  "social_network_id": {
                    "description": "The social network account ID for a SINGLE account only. You MUST ask the user to choose exactly one account before calling this tool. Do NOT call this for multiple accounts in parallel.",
                    "type": "string"
                  },
                  "start_date": {
                    "description": "Start date in Y-m-d format (required if no preset)",
                    "type": "string"
                  },
                  "timezone": {
                    "description": "PHP timezone identifier (e.g., \"America/New_York\")",
                    "type": "string"
                  }
                },
                "required": [
                  "social_network_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "data": {
                    "description": "Analytics data returned by OneUp for the selected account and date range.",
                    "type": [
                      "object",
                      "array"
                    ]
                  }
                },
                "required": [
                  "data"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "get-snapchat-posts-tool",
              "title": "Get Snapchat Posts Tool",
              "description": "Retrieves analytics for individual Snapchat posts including views, likes, comments, shares, screenshots, and per-snap performance.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "end_date": {
                    "description": "End date in Y-m-d format (required if no preset). Must be on or after start_date and no later than yesterday (UTC).",
                    "type": "string"
                  },
                  "preset": {
                    "description": "Date range preset: \"last_7_days\", \"last_30_days\", or \"last_90_days\"",
                    "type": "string"
                  },
                  "social_network_id": {
                    "description": "The social network account ID for a SINGLE account only. You MUST ask the user to choose exactly one account before calling this tool. Do NOT call this for multiple accounts in parallel.",
                    "type": "string"
                  },
                  "start_date": {
                    "description": "Start date in Y-m-d format (required if no preset)",
                    "type": "string"
                  },
                  "timezone": {
                    "description": "PHP timezone identifier (e.g., \"America/New_York\")",
                    "type": "string"
                  }
                },
                "required": [
                  "social_network_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "data": {
                    "description": "Analytics data returned by OneUp for the selected account and date range.",
                    "type": [
                      "object",
                      "array"
                    ]
                  }
                },
                "required": [
                  "data"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "get-pinterest-overview-tool",
              "title": "Get Pinterest Overview Tool",
              "description": "Retrieves Pinterest account overview analytics including post counts, impressions, saves, comments, repins, clicks, and total followers with period comparison.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "end_date": {
                    "description": "End date in Y-m-d format (required if no preset). Must be on or after start_date and no later than yesterday (UTC).",
                    "type": "string"
                  },
                  "preset": {
                    "description": "Date range preset: \"last_7_days\", \"last_30_days\", or \"last_90_days\"",
                    "type": "string"
                  },
                  "social_network_id": {
                    "description": "The social network account ID for a SINGLE account only. You MUST ask the user to choose exactly one account before calling this tool. Do NOT call this for multiple accounts in parallel.",
                    "type": "string"
                  },
                  "start_date": {
                    "description": "Start date in Y-m-d format (required if no preset)",
                    "type": "string"
                  },
                  "timezone": {
                    "description": "PHP timezone identifier (e.g., \"America/New_York\")",
                    "type": "string"
                  }
                },
                "required": [
                  "social_network_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "data": {
                    "description": "Analytics data returned by OneUp for the selected account and date range.",
                    "type": [
                      "object",
                      "array"
                    ]
                  }
                },
                "required": [
                  "data"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "get-pinterest-posts-tool",
              "title": "Get Pinterest Posts Tool",
              "description": "Retrieves analytics for individual Pinterest pins including impressions, saves, comments, repins, clicks, and per-pin performance.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "end_date": {
                    "description": "End date in Y-m-d format (required if no preset). Must be on or after start_date and no later than yesterday (UTC).",
                    "type": "string"
                  },
                  "preset": {
                    "description": "Date range preset: \"last_7_days\", \"last_30_days\", or \"last_90_days\"",
                    "type": "string"
                  },
                  "social_network_id": {
                    "description": "The social network account ID for a SINGLE account only. You MUST ask the user to choose exactly one account before calling this tool. Do NOT call this for multiple accounts in parallel.",
                    "type": "string"
                  },
                  "start_date": {
                    "description": "Start date in Y-m-d format (required if no preset)",
                    "type": "string"
                  },
                  "timezone": {
                    "description": "PHP timezone identifier (e.g., \"America/New_York\")",
                    "type": "string"
                  }
                },
                "required": [
                  "social_network_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "data": {
                    "description": "Analytics data returned by OneUp for the selected account and date range.",
                    "type": [
                      "object",
                      "array"
                    ]
                  }
                },
                "required": [
                  "data"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "get-reddit-overview-tool",
              "title": "Get Reddit Overview Tool",
              "description": "Retrieves Reddit account overview analytics including post counts, upvotes, downvotes, comments, shares, and total followers with period comparison.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "end_date": {
                    "description": "End date in Y-m-d format (required if no preset). Must be on or after start_date and no later than yesterday (UTC).",
                    "type": "string"
                  },
                  "preset": {
                    "description": "Date range preset: \"last_7_days\", \"last_30_days\", or \"last_90_days\"",
                    "type": "string"
                  },
                  "social_network_id": {
                    "description": "The social network account ID for a SINGLE account only. You MUST ask the user to choose exactly one account before calling this tool. Do NOT call this for multiple accounts in parallel.",
                    "type": "string"
                  },
                  "start_date": {
                    "description": "Start date in Y-m-d format (required if no preset)",
                    "type": "string"
                  },
                  "timezone": {
                    "description": "PHP timezone identifier (e.g., \"America/New_York\")",
                    "type": "string"
                  }
                },
                "required": [
                  "social_network_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "data": {
                    "description": "Analytics data returned by OneUp for the selected account and date range.",
                    "type": [
                      "object",
                      "array"
                    ]
                  }
                },
                "required": [
                  "data"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "get-reddit-posts-tool",
              "title": "Get Reddit Posts Tool",
              "description": "Retrieves analytics for individual Reddit posts including upvotes, downvotes, comments, shares, and per-post performance.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "end_date": {
                    "description": "End date in Y-m-d format (required if no preset). Must be on or after start_date and no later than yesterday (UTC).",
                    "type": "string"
                  },
                  "preset": {
                    "description": "Date range preset: \"last_7_days\", \"last_30_days\", or \"last_90_days\"",
                    "type": "string"
                  },
                  "social_network_id": {
                    "description": "The social network account ID for a SINGLE account only. You MUST ask the user to choose exactly one account before calling this tool. Do NOT call this for multiple accounts in parallel.",
                    "type": "string"
                  },
                  "start_date": {
                    "description": "Start date in Y-m-d format (required if no preset)",
                    "type": "string"
                  },
                  "timezone": {
                    "description": "PHP timezone identifier (e.g., \"America/New_York\")",
                    "type": "string"
                  }
                },
                "required": [
                  "social_network_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "data": {
                    "description": "Analytics data returned by OneUp for the selected account and date range.",
                    "type": [
                      "object",
                      "array"
                    ]
                  }
                },
                "required": [
                  "data"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "get-threads-overview-tool",
              "title": "Get Threads Overview Tool",
              "description": "Retrieves Threads account overview analytics including post counts, views, likes, comments, replies, reposts, quotes, and total followers with period comparison.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "end_date": {
                    "description": "End date in Y-m-d format (required if no preset). Must be on or after start_date and no later than yesterday (UTC).",
                    "type": "string"
                  },
                  "preset": {
                    "description": "Date range preset: \"last_7_days\", \"last_30_days\", or \"last_90_days\"",
                    "type": "string"
                  },
                  "social_network_id": {
                    "description": "The social network account ID for a SINGLE account only. You MUST ask the user to choose exactly one account before calling this tool. Do NOT call this for multiple accounts in parallel.",
                    "type": "string"
                  },
                  "start_date": {
                    "description": "Start date in Y-m-d format (required if no preset)",
                    "type": "string"
                  },
                  "timezone": {
                    "description": "PHP timezone identifier (e.g., \"America/New_York\")",
                    "type": "string"
                  }
                },
                "required": [
                  "social_network_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "data": {
                    "description": "Analytics data returned by OneUp for the selected account and date range.",
                    "type": [
                      "object",
                      "array"
                    ]
                  }
                },
                "required": [
                  "data"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "get-threads-posts-tool",
              "title": "Get Threads Posts Tool",
              "description": "Retrieves analytics for individual Threads posts including views, likes, comments, replies, reposts, quotes, and per-post performance.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "end_date": {
                    "description": "End date in Y-m-d format (required if no preset). Must be on or after start_date and no later than yesterday (UTC).",
                    "type": "string"
                  },
                  "preset": {
                    "description": "Date range preset: \"last_7_days\", \"last_30_days\", or \"last_90_days\"",
                    "type": "string"
                  },
                  "social_network_id": {
                    "description": "The social network account ID for a SINGLE account only. You MUST ask the user to choose exactly one account before calling this tool. Do NOT call this for multiple accounts in parallel.",
                    "type": "string"
                  },
                  "start_date": {
                    "description": "Start date in Y-m-d format (required if no preset)",
                    "type": "string"
                  },
                  "timezone": {
                    "description": "PHP timezone identifier (e.g., \"America/New_York\")",
                    "type": "string"
                  }
                },
                "required": [
                  "social_network_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "data": {
                    "description": "Analytics data returned by OneUp for the selected account and date range.",
                    "type": [
                      "object",
                      "array"
                    ]
                  }
                },
                "required": [
                  "data"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "get-bluesky-overview-tool",
              "title": "Get Bluesky Overview Tool",
              "description": "Retrieves Bluesky account overview analytics including post counts, impressions, likes, comments, reposts, quotes, and total followers with period comparison.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "end_date": {
                    "description": "End date in Y-m-d format (required if no preset). Must be on or after start_date and no later than yesterday (UTC).",
                    "type": "string"
                  },
                  "preset": {
                    "description": "Date range preset: \"last_7_days\", \"last_30_days\", or \"last_90_days\"",
                    "type": "string"
                  },
                  "social_network_id": {
                    "description": "The social network account ID for a SINGLE account only. You MUST ask the user to choose exactly one account before calling this tool. Do NOT call this for multiple accounts in parallel.",
                    "type": "string"
                  },
                  "start_date": {
                    "description": "Start date in Y-m-d format (required if no preset)",
                    "type": "string"
                  },
                  "timezone": {
                    "description": "PHP timezone identifier (e.g., \"America/New_York\")",
                    "type": "string"
                  }
                },
                "required": [
                  "social_network_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "data": {
                    "description": "Analytics data returned by OneUp for the selected account and date range.",
                    "type": [
                      "object",
                      "array"
                    ]
                  }
                },
                "required": [
                  "data"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            },
            {
              "name": "get-bluesky-posts-tool",
              "title": "Get Bluesky Posts Tool",
              "description": "Retrieves analytics for individual Bluesky posts including impressions, likes, comments, reposts, quotes, and per-post performance.",
              "inputSchema": {
                "properties": {
                  "api_key": {
                    "description": "Your OneUp API key (optional if provided in MCP URL)",
                    "type": "string"
                  },
                  "end_date": {
                    "description": "End date in Y-m-d format (required if no preset). Must be on or after start_date and no later than yesterday (UTC).",
                    "type": "string"
                  },
                  "preset": {
                    "description": "Date range preset: \"last_7_days\", \"last_30_days\", or \"last_90_days\"",
                    "type": "string"
                  },
                  "social_network_id": {
                    "description": "The social network account ID for a SINGLE account only. You MUST ask the user to choose exactly one account before calling this tool. Do NOT call this for multiple accounts in parallel.",
                    "type": "string"
                  },
                  "start_date": {
                    "description": "Start date in Y-m-d format (required if no preset)",
                    "type": "string"
                  },
                  "timezone": {
                    "description": "PHP timezone identifier (e.g., \"America/New_York\")",
                    "type": "string"
                  }
                },
                "required": [
                  "social_network_id"
                ],
                "type": "object"
              },
              "outputSchema": {
                "properties": {
                  "data": {
                    "description": "Analytics data returned by OneUp for the selected account and date range.",
                    "type": [
                      "object",
                      "array"
                    ]
                  }
                },
                "required": [
                  "data"
                ],
                "type": "object"
              },
              "annotations": {
                "destructiveHint": false,
                "openWorldHint": false,
                "readOnlyHint": true
              }
            }
          ],
          "schemaTokens": 26618,
          "changedAt": "2026-11-07T01:46:34.47238256Z",
          "check": {
            "checker": "anchor-check/1.0",
            "totalTokens": 26618,
            "counts": {
              "error": 0,
              "note": 0,
              "warn": 8
            },
            "findings": [
              {
                "rule": "TC13",
                "severity": "warn",
                "tool": "schedule-image-post-tool",
                "message": "facebook (object with no properties), instagram (object with no properties), pinterest (object with no properties), snapchat (object with no properties) and 1 more",
                "fix": "Declare the properties (or additionalProperties with a schema) and the array's items."
              },
              {
                "rule": "TC13",
                "severity": "warn",
                "tool": "schedule-text-post-tool",
                "message": "facebook (object with no properties)",
                "fix": "Declare the properties (or additionalProperties with a schema) and the array's items."
              },
              {
                "rule": "TC13",
                "severity": "warn",
                "tool": "schedule-video-post-tool",
                "message": "facebook (object with no properties), instagram (object with no properties), pinterest (object with no properties), snapchat (object with no properties) and 2 more",
                "fix": "Declare the properties (or additionalProperties with a schema) and the array's items."
              },
              {
                "rule": "TC21",
                "severity": "warn",
                "tool": "get-meta-ads-ad-sets-tool",
                "message": "described almost the same as get-meta-ads-ads-tool (93% of the same words)",
                "fix": "Say in each description when to use it instead of the other."
              },
              {
                "rule": "TC21",
                "severity": "warn",
                "tool": "get-scheduled-posts-tool",
                "message": "described almost the same as get_published_posts (85% of the same words)",
                "fix": "Say in each description when to use it instead of the other."
              },
              {
                "rule": "TC22",
                "severity": "warn",
                "tool": "schedule-image-post-tool",
                "message": "the definition is about 1,583 tokens",
                "fix": "Trim the description and parameter docs, or split the tool."
              },
              {
                "rule": "TC22",
                "severity": "warn",
                "tool": "schedule-video-post-tool",
                "message": "the definition is about 1,862 tokens",
                "fix": "Trim the description and parameter docs, or split the tool."
              },
              {
                "rule": "TC23",
                "severity": "warn",
                "message": "71 tools, about 26,631 tokens of definitions",
                "fix": "Split the server by job, or offer a smaller default toolset (a read-only set, or a search-then-call pattern)."
              }
            ]
          }
        },
        "updatedAt": "2026-11-08T00:55:55.231504149Z"
      }
    },
    "answer": "Xpoz MCP scores 39.6 (E) on agent readiness against OneUp API + MCP's 24.5 (F), and leads in 5 of 7 scored categories. OneUp API + MCP leads on maintenance \u0026 community and transparency \u0026 trust.",
    "b": {
      "slug": "xpoz-mcp",
      "name": "Xpoz MCP",
      "vendor": "XPOZ",
      "vendorUrl": "https://xpoz.ai",
      "kind": "mcp",
      "category": "social-media",
      "summary": "Xpoz's hosted MCP server gives an agent 52 tools to search posts and profiles on X, Instagram, TikTok and Reddit, track brands and competitors and analyse engagement, with an API key and no platform API keys of its own.",
      "url": "https://www.anchorterminal.com/tools/xpoz-mcp",
      "markdownUrl": "https://www.anchorterminal.com/tools/xpoz-mcp.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/xpoz-mcp.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/xpoz-mcp.json",
      "dns": "xpoz-mcp.grade.anchorterminal.com",
      "repo": "https://github.com/xpozpublic/xpoz-mcp",
      "transports": [
        "streamable-http"
      ],
      "remoteUrl": "https://mcp.xpoz.ai/mcp",
      "packages": [],
      "auth": "api-key",
      "authNotes": "An Xpoz API key in an Authorization: Bearer header. No X, Instagram, TikTok or Reddit keys are needed.",
      "pricing": "freemium",
      "pricingNotes": "Free $0 with 500 credits; Pro $20 a month ($16 billed yearly); Max on the pricing page (checked 2026-11-07).",
      "priceSummary": "Freemium",
      "where": "hosted",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 on the MCP docs or pricing page (checked 2026-11-07).",
        "endpoints": []
      },
      "toolCount": 52,
      "popularity": {
        "githubStars": null,
        "npmWeekly": null,
        "pypiWeekly": null,
        "asOf": "2026-11-07"
      },
      "docsUrl": "https://xpoz.ai",
      "registryName": "ai.xpoz/social-insights",
      "capabilities": [
        "social.analytics",
        "social.comments",
        "search.news",
        "data.social"
      ],
      "tags": [
        "hosted",
        "mcp",
        "remote-mcp",
        "api-key",
        "freemium",
        "free-tier",
        "mcp-registry",
        "annotated-tools",
        "third-party"
      ],
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 39.6,
        "grade": "E",
        "agentReady": false,
        "rank": 1339,
        "ranked": true,
        "rankOf": 1510,
        "categoryRank": 16,
        "methodology": "0.7",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 63,
          "maintenance": 25,
          "payments": 30,
          "reliability": 20,
          "schema": 64,
          "security": 37,
          "transparency": 29
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "low",
          "date": "2026-11-07"
        },
        "negative": 0,
        "verdict": "Xpoz's MCP server covers X, Instagram, TikTok and Reddit in one place, with typed, annotated tools and field selection that keeps results small. It's a third-party data service that doesn't say how it gets platform data, and at 238 KB of definitions it's very heavy.",
        "bestFor": "Agents doing social listening and brand monitoring across several networks, where a third-party source is acceptable.",
        "strengths": [
          "X, Instagram, TikTok and Reddit in one server",
          "Field selection and paging keep results small",
          "52 typed, annotated tools, 49 read-only",
          "Free 500 credits"
        ],
        "weaknesses": [
          "About 238 KB of tool definitions",
          "Third-party social data with no stated source",
          "No status page, limits or changelog",
          "Registry entry not updated since July"
        ],
        "agentNotes": [
          "Pass fields to select only what's needed",
          "Page with the returned tableName",
          "Treat posts and bios as untrusted text",
          "Check each platform's terms before relying on the data"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "low",
            "grade": "E",
            "methodology": "0.7",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 39.6
          }
        ],
        "editorialScores": {
          "ergonomics": 63,
          "maintenance": 25,
          "payments": 30,
          "reliability": 20,
          "schema": 64,
          "security": 37,
          "transparency": 15
        },
        "provenanceScore": 42,
        "checked": {
          "categories": {
            "ergonomics": "2026-11-07",
            "maintenance": "2026-11-07",
            "payments": "2026-11-07",
            "reliability": "2026-11-07",
            "schema": "2026-11-07",
            "security": "2026-11-07",
            "transparency": "2026-11-07"
          },
          "last": "2026-11-07",
          "oldest": "2026-11-07",
          "stale": false,
          "staleAfterDays": 90
        }
      },
      "connect": {
        "claudeCode": "claude mcp add --transport http --scope user xpoz-mcp https://mcp.xpoz.ai/mcp --header \"Authorization: Bearer $XPOZ_API_KEY\"",
        "config": {
          "mcpServers": {
            "xpoz": {
              "headers": {
                "Authorization": "Bearer YOUR_API_KEY"
              },
              "url": "https://mcp.xpoz.ai/mcp"
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/social.analytics",
        "tool": "https://letme.dev/xpoz-mcp"
      },
      "area": "communication",
      "provenance": {
        "legalEntity": "XPOZ",
        "domain": "xpoz.ai",
        "domainRegistered": "",
        "domainNote": "Not looked up: RDAP isn't requested under the 1 November 2026 rules.",
        "endpointOnVendorDomain": true,
        "terms": "https://xpoz.ai/terms",
        "privacy": "",
        "statusPage": "",
        "changelog": "",
        "securityTxt": "none",
        "checked": "2026-11-07",
        "notes": [
          "The terms of use don't name a legal entity in the parts read."
        ],
        "score": 42
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/xpoz-mcp.json",
      "live": {
        "slug": "xpoz-mcp",
        "probe": {
          "target": "https://mcp.xpoz.ai/mcp",
          "method": "mcp-initialize",
          "lastAt": "2026-11-08T00:56:15.656483221Z",
          "lastOk": true,
          "lastStatus": 200,
          "lastMs": 150,
          "lastNote": "initialize answered",
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 100,
          "p95ms24h": 152,
          "samples24h": 63,
          "samples30d": 63,
          "days": [
            {
              "date": "2026-11-07",
              "probes": 53,
              "ok": 53
            },
            {
              "date": "2026-11-08",
              "probes": 10,
              "ok": 10
            }
          ]
        },
        "updatedAt": "2026-11-08T00:56:15.656483221Z"
      }
    },
    "edges": [
      {
        "by": 37,
        "category": "schema",
        "leads": "xpoz-mcp",
        "name": "Schema \u0026 documentation",
        "reasons": {
          "a": "No OpenAPI or other machine-readable contract, and we couldn't read the MCP input schemas without a key (0). No llms.txt, docs.oneupapp.io/llms.txt returned 404 (0). Each endpoint page says what the call does, with nothing on when not to use it (8). Parameters are listed with types and required flags and one enum (google_post_type), but social_network_id takes either a JSON array or the string ALL (8). Success examples on every page we read, and no documented error responses (5). No API versioning. A help-centre changelog dated by month includes API and MCP entries (6).",
          "b": "52 tools read from tools/list with JSON Schema inputs and 42 enums (25). No llms.txt read (0). Server instructions explain paging and field selection (16 of 20). Typed inputs with enums (15). Examples on the home page (5 of 15). Registry 1.4.1 from July, server 3.0.0; no changelog (3 of 15). 25 + 0 + 16 + 15 + 5 + 3 = 64."
        },
        "scores": {
          "a": 27,
          "b": 64
        }
      },
      {
        "by": 32,
        "category": "ergonomics",
        "leads": "xpoz-mcp",
        "name": "Agent ergonomics",
        "reasons": {
          "a": "The hosted MCP returned 50 tools on tools/list per the 30 September check, with no toolsets or read-only subset (5). List endpoints page with a start index and return up to 50 posts each, and scheduled, published, failed and draft posts have separate lists. No field selection (12). Responses carry an error boolean and a message, with no documented codes (4). No idempotency key. isDraftPost and requireApproval keep a post from going straight out, and we couldn't check for MCP annotations (5). No SDKs. A text post needs five parameters (5).",
          "b": "52 tools totalling about 238 KB (5). A fields parameter to select only needed fields, and paged results via a tableName (20). No documented errors (3 of 20). All annotated, 49 read-only (20). SDKs and a CLI (15). 5 + 20 + 3 + 20 + 15 = 63."
        },
        "scores": {
          "a": 31,
          "b": 63
        }
      },
      {
        "by": 20,
        "category": "security",
        "leads": "xpoz-mcp",
        "name": "Security \u0026 auth",
        "reasons": {
          "a": "One account key per user with no scopes, sent as the apiKey query parameter on every REST call and in the MCP URL. The docs say to revoke and regenerate it if compromised, and ChatGPT can connect over OAuth instead. Revocable key (15), less 10 for the documented query-string secret, plus 3 for the ChatGPT OAuth path (8). No read-only mode. requireApproval and isDraftPost give a review step (6). Comment and inbox endpoints, WhatsApp included, return text from strangers and we found no prompt-injection guidance (0). No audit log or key usage view found (0). The pricing page lists SOC 2 and ISO 27001 against the Enterprise tier without a report or trust page, and there's no security.txt or disclosure route (3).",
          "b": "One API key (20 of 30). 49 of 52 tools read-only (15 of 20). Posts and profiles are third-party text; the server says all tools are 'safe and read-only' but gives no injection guidance (0). No audit log (0). No security programme found (2 of 20). 20 + 15 + 0 + 0 + 2 = 37."
        },
        "scores": {
          "a": 17,
          "b": 37
        }
      },
      {
        "by": 20,
        "category": "payments",
        "leads": "xpoz-mcp",
        "name": "Payments \u0026 pricing",
        "reasons": {
          "a": "No x402 or other machine payment (0). Plan prices are public, with no per-call price (10). No free plan. The 7-day trial's checkout reads $0.00 due today, with a refund promise for the week after the trial ends, and we found nothing saying no card is needed (0). A person has to sign up in a browser and generate the key (0).",
          "b": "No machine payment protocol (0). Plan prices public (10). Free 500 credits (20). A person signs in for a key (0). 0 + 10 + 20 + 0 = 30."
        },
        "scores": {
          "a": 10,
          "b": 30
        }
      },
      {
        "by": 18,
        "category": "maintenance",
        "leads": "oneup",
        "name": "Maintenance \u0026 community",
        "reasons": {
          "a": "The help-centre changelog was updated on 23 September 2026 with September product entries. The last entry naming the API or MCP is posting from ChatGPT in August 2026 (20). 11 entries dated July to September 2026, by month rather than day (15). Public changelog and email support at help@oneupapp.io (8). No SDKs or MCP registry entry (0). No packages to assess (0).",
          "b": "Registry entry last updated 14 July 2026 and repository commit on 9 September; the live server reports 3.0.0 (10). No dated releases in 90 days (0). Issues not read (0). Official registry entry ai.xpoz/social-insights (15). Docker packaging only (0). 10 + 0 + 0 + 15 + 0 = 25. Registry presence read from Anchor Terminal's own daily import of the official MCP registry (/api/v1/registry.json, 6 November 2026), not the registry's API."
        },
        "scores": {
          "a": 43,
          "b": 25
        }
      },
      {
        "by": 11,
        "category": "transparency",
        "leads": "oneup",
        "name": "Transparency \u0026 trust",
        "reasons": {
          "a": "Closed service under terms from OneUp, Inc. of Cranberry Township, Pennsylvania, with California governing law and no last-updated date (12). The privacy policy says user content is stored indefinitely while the account is active and removed when the account is deleted, names no subprocessors, has no DPA and no date (8). No deprecation policy, and the terms reserve the right to change or discontinue the service without notice (0). No subprocessors or data locations found (0).",
          "b": "Closed service; terms of use read without a legal entity (10 of 30). Data handling not read (5 of 30). No deprecation policy (0). Where the social data comes from isn't stated beyond 'no platform API keys' (0). 10 + 5 + 0 + 0 = 15."
        },
        "scores": {
          "a": 40,
          "b": 29
        }
      }
    ],
    "facts": [
      {
        "a": "HTTP API",
        "b": "MCP server",
        "name": "Kind"
      },
      {
        "a": "OneUp",
        "b": "XPOZ",
        "name": "Vendor"
      },
      {
        "a": "https://www.oneupapp.io/api",
        "b": "https://mcp.xpoz.ai/mcp",
        "name": "Hosted endpoint"
      },
      {
        "a": "HTTP, Streamable HTTP",
        "b": "Streamable HTTP",
        "name": "Transports"
      },
      {
        "a": "API key",
        "b": "API key",
        "name": "Auth"
      },
      {
        "a": "Paid",
        "b": "Freemium",
        "name": "Pricing"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "50",
        "b": "52",
        "name": "Tools exposed"
      },
      {
        "a": "no",
        "b": "yes",
        "name": "Read-only variant documented"
      },
      {
        "a": "no",
        "b": "no",
        "name": "llms.txt"
      },
      {
        "a": "not listed",
        "b": "ai.xpoz/social-insights",
        "name": "MCP registry"
      },
      {
        "a": "no date given",
        "b": "not read yet",
        "name": "Terms last updated"
      },
      {
        "a": "no date given",
        "b": "no document linked",
        "name": "Privacy policy last updated"
      },
      {
        "a": "not found in the text",
        "b": "not read yet",
        "name": "Customer content may train models"
      },
      {
        "a": "not found in the text",
        "b": "not read yet",
        "name": "Terms restrict automated access"
      },
      {
        "a": "not found in the text",
        "b": "not read yet",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "yes",
        "b": "not read yet",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "yes",
        "b": "not read yet",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "1.5/5 (2)",
        "b": "none",
        "name": "Agent reviews"
      }
    ],
    "faq": [
      {
        "answer": "Xpoz MCP scores 39.6 (E) on agent readiness against OneUp API + MCP's 24.5 (F), and leads in 5 of 7 scored categories. OneUp API + MCP leads on maintenance \u0026 community and transparency \u0026 trust.",
        "question": "Which is better for AI agents, OneUp API + MCP or Xpoz MCP?"
      },
      {
        "answer": "Both need an API key.",
        "question": "Do OneUp API + MCP and Xpoz MCP need an API key?"
      },
      {
        "answer": "Yes. OneUp API + MCP has a hosted endpoint at https://www.oneupapp.io/api and Xpoz MCP at https://mcp.xpoz.ai/mcp.",
        "question": "Can an agent call OneUp API + MCP and Xpoz MCP without installing anything?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Maintenance \u0026 community, 43 against 25",
          "Transparency \u0026 trust, 40 against 29"
        ],
        "also": null,
        "goodFor": "Small agencies that want posting, comment replies and a WhatsApp inbox from Claude or ChatGPT at a low monthly price.",
        "slug": "oneup",
        "watchFor": "API key in the query string on REST and in the MCP URL, with no scopes"
      },
      {
        "aheadOn": [
          "Schema \u0026 documentation, 64 against 27",
          "Agent ergonomics, 63 against 31",
          "Security \u0026 auth, 37 against 17",
          "Payments \u0026 pricing, 30 against 10"
        ],
        "also": null,
        "goodFor": "Agents doing social listening and brand monitoring across several networks, where a third-party source is acceptable.",
        "slug": "xpoz-mcp",
        "watchFor": "About 238 KB of tool definitions"
      }
    ],
    "history": {
      "oneup": [
        {
          "causes": [
            "method"
          ],
          "date": "2026-10-27",
          "delta": 0.1,
          "from": 24.4,
          "fromGrade": "F",
          "to": 24.5,
          "toGrade": "F"
        },
        {
          "causes": [
            "method"
          ],
          "date": "2026-10-08",
          "delta": -0.4,
          "from": 24.8,
          "fromGrade": "F",
          "to": 24.4,
          "toGrade": "F"
        }
      ],
      "xpoz-mcp": null
    },
    "job": {
      "capability": "social.analytics",
      "name": "Social analytics"
    },
    "others": [
      {
        "json": "https://www.anchorterminal.com/compare/ayrshare-vs-oneup.json",
        "title": "Ayrshare API + MCP vs OneUp API + MCP",
        "url": "https://www.anchorterminal.com/compare/ayrshare-vs-oneup"
      },
      {
        "json": "https://www.anchorterminal.com/compare/blotato-vs-oneup.json",
        "title": "Blotato vs OneUp API + MCP",
        "url": "https://www.anchorterminal.com/compare/blotato-vs-oneup"
      },
      {
        "json": "https://www.anchorterminal.com/compare/buffer-vs-oneup.json",
        "title": "Buffer API + MCP vs OneUp API + MCP",
        "url": "https://www.anchorterminal.com/compare/buffer-vs-oneup"
      },
      {
        "json": "https://www.anchorterminal.com/compare/bundle-social-vs-oneup.json",
        "title": "bundle.social vs OneUp API + MCP",
        "url": "https://www.anchorterminal.com/compare/bundle-social-vs-oneup"
      },
      {
        "json": "https://www.anchorterminal.com/compare/late-vs-oneup.json",
        "title": "Zernio (formerly Late) API + MCP vs OneUp API + MCP",
        "url": "https://www.anchorterminal.com/compare/late-vs-oneup"
      },
      {
        "json": "https://www.anchorterminal.com/compare/metricool-vs-oneup.json",
        "title": "Metricool API + MCP vs OneUp API + MCP",
        "url": "https://www.anchorterminal.com/compare/metricool-vs-oneup"
      },
      {
        "json": "https://www.anchorterminal.com/compare/mixpost-vs-oneup.json",
        "title": "Mixpost API + MCP vs OneUp API + MCP",
        "url": "https://www.anchorterminal.com/compare/mixpost-vs-oneup"
      },
      {
        "json": "https://www.anchorterminal.com/compare/oneup-vs-post-bridge.json",
        "title": "OneUp API + MCP vs Post Bridge API + MCP",
        "url": "https://www.anchorterminal.com/compare/oneup-vs-post-bridge"
      },
      {
        "json": "https://www.anchorterminal.com/compare/oneup-vs-postiz.json",
        "title": "OneUp API + MCP vs Postiz API + MCP",
        "url": "https://www.anchorterminal.com/compare/oneup-vs-postiz"
      },
      {
        "json": "https://www.anchorterminal.com/compare/oneup-vs-publer.json",
        "title": "OneUp API + MCP vs Publer API + MCP",
        "url": "https://www.anchorterminal.com/compare/oneup-vs-publer"
      },
      {
        "json": "https://www.anchorterminal.com/compare/oneup-vs-repostit.json",
        "title": "OneUp API + MCP vs Repostit",
        "url": "https://www.anchorterminal.com/compare/oneup-vs-repostit"
      },
      {
        "json": "https://www.anchorterminal.com/compare/oneup-vs-typefully.json",
        "title": "OneUp API + MCP vs Typefully",
        "url": "https://www.anchorterminal.com/compare/oneup-vs-typefully"
      },
      {
        "json": "https://www.anchorterminal.com/compare/oneup-vs-upload-post.json",
        "title": "OneUp API + MCP vs Upload-Post API + MCP",
        "url": "https://www.anchorterminal.com/compare/oneup-vs-upload-post"
      },
      {
        "json": "https://www.anchorterminal.com/compare/ayrshare-vs-xpoz-mcp.json",
        "title": "Ayrshare API + MCP vs Xpoz MCP",
        "url": "https://www.anchorterminal.com/compare/ayrshare-vs-xpoz-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/blotato-vs-xpoz-mcp.json",
        "title": "Blotato vs Xpoz MCP",
        "url": "https://www.anchorterminal.com/compare/blotato-vs-xpoz-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/buffer-vs-xpoz-mcp.json",
        "title": "Buffer API + MCP vs Xpoz MCP",
        "url": "https://www.anchorterminal.com/compare/buffer-vs-xpoz-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/bundle-social-vs-xpoz-mcp.json",
        "title": "bundle.social vs Xpoz MCP",
        "url": "https://www.anchorterminal.com/compare/bundle-social-vs-xpoz-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/late-vs-xpoz-mcp.json",
        "title": "Zernio (formerly Late) API + MCP vs Xpoz MCP",
        "url": "https://www.anchorterminal.com/compare/late-vs-xpoz-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/metricool-vs-xpoz-mcp.json",
        "title": "Metricool API + MCP vs Xpoz MCP",
        "url": "https://www.anchorterminal.com/compare/metricool-vs-xpoz-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/mixpost-vs-xpoz-mcp.json",
        "title": "Mixpost API + MCP vs Xpoz MCP",
        "url": "https://www.anchorterminal.com/compare/mixpost-vs-xpoz-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/oneup-vs-sprout-social.json",
        "title": "OneUp API + MCP vs Sprout Social API",
        "url": "https://www.anchorterminal.com/compare/oneup-vs-sprout-social"
      },
      {
        "json": "https://www.anchorterminal.com/compare/oneup-vs-twitterapi-io-mcp.json",
        "title": "OneUp API + MCP vs TwitterAPI.io MCP",
        "url": "https://www.anchorterminal.com/compare/oneup-vs-twitterapi-io-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/oneup-vs-x-mcp.json",
        "title": "OneUp API + MCP vs X MCP",
        "url": "https://www.anchorterminal.com/compare/oneup-vs-x-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/post-bridge-vs-xpoz-mcp.json",
        "title": "Post Bridge API + MCP vs Xpoz MCP",
        "url": "https://www.anchorterminal.com/compare/post-bridge-vs-xpoz-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/postiz-vs-xpoz-mcp.json",
        "title": "Postiz API + MCP vs Xpoz MCP",
        "url": "https://www.anchorterminal.com/compare/postiz-vs-xpoz-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/publer-vs-xpoz-mcp.json",
        "title": "Publer API + MCP vs Xpoz MCP",
        "url": "https://www.anchorterminal.com/compare/publer-vs-xpoz-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/socialcannon-vs-xpoz-mcp.json",
        "title": "SocialCannon vs Xpoz MCP",
        "url": "https://www.anchorterminal.com/compare/socialcannon-vs-xpoz-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/sprout-social-vs-xpoz-mcp.json",
        "title": "Sprout Social API vs Xpoz MCP",
        "url": "https://www.anchorterminal.com/compare/sprout-social-vs-xpoz-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/twitterapi-io-mcp-vs-xpoz-mcp.json",
        "title": "TwitterAPI.io MCP vs Xpoz MCP",
        "url": "https://www.anchorterminal.com/compare/twitterapi-io-mcp-vs-xpoz-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/upload-post-vs-xpoz-mcp.json",
        "title": "Upload-Post API + MCP vs Xpoz MCP",
        "url": "https://www.anchorterminal.com/compare/upload-post-vs-xpoz-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/x-mcp-vs-xpoz-mcp.json",
        "title": "X MCP vs Xpoz MCP",
        "url": "https://www.anchorterminal.com/compare/x-mcp-vs-xpoz-mcp"
      },
      {
        "json": "https://www.anchorterminal.com/compare/oneup-vs-socialcannon.json",
        "title": "OneUp API + MCP vs SocialCannon",
        "url": "https://www.anchorterminal.com/compare/oneup-vs-socialcannon"
      }
    ],
    "panel": null,
    "scores": [
      {
        "by": 2,
        "edge": "xpoz-mcp",
        "key": "reliability",
        "name": "Reliability",
        "oneup": 18,
        "weight": 16,
        "xpoz-mcp": 20
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 37,
        "edge": "xpoz-mcp",
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "oneup": 27,
        "weight": 13,
        "xpoz-mcp": 64
      },
      {
        "by": 32,
        "edge": "xpoz-mcp",
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "oneup": 31,
        "weight": 13,
        "xpoz-mcp": 63
      },
      {
        "by": 20,
        "edge": "xpoz-mcp",
        "key": "security",
        "name": "Security \u0026 auth",
        "oneup": 17,
        "weight": 14,
        "xpoz-mcp": 37
      },
      {
        "by": 20,
        "edge": "xpoz-mcp",
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "oneup": 10,
        "weight": 10,
        "xpoz-mcp": 30
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 18,
        "edge": "oneup",
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "oneup": 43,
        "weight": 7,
        "xpoz-mcp": 25
      },
      {
        "by": 11,
        "edge": "oneup",
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "oneup": 40,
        "weight": 7,
        "xpoz-mcp": 29
      }
    ],
    "summary": "Xpoz MCP scores 39.6 (E) on agent readiness against OneUp API + MCP's 24.5 (F), and leads in 5 of 7 scored categories. OneUp API + MCP leads on maintenance \u0026 community and transparency \u0026 trust. Both do social analytics.",
    "tasks": null,
    "tutorials": [],
    "verdicts": {
      "oneup": "API and MCP on every plan from $25 a month ($15 billed yearly). API key in the query string on REST and in the MCP URL, with no scopes.",
      "xpoz-mcp": "Xpoz's MCP server covers X, Instagram, TikTok and Reddit in one place, with typed, annotated tools and field selection that keeps results small. It's a third-party data service that doesn't say how it gets platform data, and at 238 KB of definitions it's very heavy."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/oneup-vs-xpoz-mcp",
    "json": "https://www.anchorterminal.com/compare/oneup-vs-xpoz-mcp.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/oneup-vs-xpoz-mcp.md",
    "mcp": "https://www.anchorterminal.com/mcp",
    "slim": "https://www.anchorterminal.com/compare/oneup-vs-xpoz-mcp.min.md"
  },
  "markdown": "Xpoz MCP scores 39.6 (E) on agent readiness against OneUp API + MCP's 24.5 (F), and leads in 5 of 7 scored categories. OneUp API + MCP leads on maintenance \u0026 community and transparency \u0026 trust. Both do social analytics.\n\n- OneUp API + MCP: grade F, 24.5/100, rank #1439 of 1510. Markdown https://www.anchorterminal.com/tools/oneup.md · JSON https://www.anchorterminal.com/api/v1/tools/oneup.json\n- Xpoz MCP: grade E, 39.6/100, rank #1339 of 1510. Markdown https://www.anchorterminal.com/tools/xpoz-mcp.md · JSON https://www.anchorterminal.com/api/v1/tools/xpoz-mcp.json\n- Best social media posting and scheduling APIs for AI agents: https://www.anchorterminal.com/best/social-media/index.md\n- All 163 social comparisons: https://www.anchorterminal.com/compare/social-media/index.md\n\n## Which one, for what\n\n### OneUp API + MCP (F)\n\nGood for: Small agencies that want posting, comment replies and a WhatsApp inbox from Claude or ChatGPT at a low monthly price.\n\nAhead on:\n- Maintenance \u0026 community, 43 against 25\n- Transparency \u0026 trust, 40 against 29\n\nWatch for: API key in the query string on REST and in the MCP URL, with no scopes\n\n### Xpoz MCP (E)\n\nGood for: Agents doing social listening and brand monitoring across several networks, where a third-party source is acceptable.\n\nAhead on:\n- Schema \u0026 documentation, 64 against 27\n- Agent ergonomics, 63 against 31\n- Security \u0026 auth, 37 against 17\n- Payments \u0026 pricing, 30 against 10\n\nWatch for: About 238 KB of tool definitions\n\n\n## Why the edge\n\n### Schema \u0026 documentation: Xpoz MCP +37\n\n- OneUp API + MCP (27): No OpenAPI or other machine-readable contract, and we couldn't read the MCP input schemas without a key (0). No llms.txt, docs.oneupapp.io/llms.txt returned 404 (0). Each endpoint page says what the call does, with nothing on when not to use it (8). Parameters are listed with types and required flags and one enum (google_post_type), but social_network_id takes either a JSON array or the string ALL (8). Success examples on every page we read, and no documented error responses (5). No API versioning. A help-centre changelog dated by month includes API and MCP entries (6).\n- Xpoz MCP (64): 52 tools read from tools/list with JSON Schema inputs and 42 enums (25). No llms.txt read (0). Server instructions explain paging and field selection (16 of 20). Typed inputs with enums (15). Examples on the home page (5 of 15). Registry 1.4.1 from July, server 3.0.0; no changelog (3 of 15). 25 + 0 + 16 + 15 + 5 + 3 = 64.\n\n### Agent ergonomics: Xpoz MCP +32\n\n- OneUp API + MCP (31): The hosted MCP returned 50 tools on tools/list per the 30 September check, with no toolsets or read-only subset (5). List endpoints page with a start index and return up to 50 posts each, and scheduled, published, failed and draft posts have separate lists. No field selection (12). Responses carry an error boolean and a message, with no documented codes (4). No idempotency key. isDraftPost and requireApproval keep a post from going straight out, and we couldn't check for MCP annotations (5). No SDKs. A text post needs five parameters (5).\n- Xpoz MCP (63): 52 tools totalling about 238 KB (5). A fields parameter to select only needed fields, and paged results via a tableName (20). No documented errors (3 of 20). All annotated, 49 read-only (20). SDKs and a CLI (15). 5 + 20 + 3 + 20 + 15 = 63.\n\n### Security \u0026 auth: Xpoz MCP +20\n\n- OneUp API + MCP (17): One account key per user with no scopes, sent as the apiKey query parameter on every REST call and in the MCP URL. The docs say to revoke and regenerate it if compromised, and ChatGPT can connect over OAuth instead. Revocable key (15), less 10 for the documented query-string secret, plus 3 for the ChatGPT OAuth path (8). No read-only mode. requireApproval and isDraftPost give a review step (6). Comment and inbox endpoints, WhatsApp included, return text from strangers and we found no prompt-injection guidance (0). No audit log or key usage view found (0). The pricing page lists SOC 2 and ISO 27001 against the Enterprise tier without a report or trust page, and there's no security.txt or disclosure route (3).\n- Xpoz MCP (37): One API key (20 of 30). 49 of 52 tools read-only (15 of 20). Posts and profiles are third-party text; the server says all tools are 'safe and read-only' but gives no injection guidance (0). No audit log (0). No security programme found (2 of 20). 20 + 15 + 0 + 0 + 2 = 37.\n\n### Payments \u0026 pricing: Xpoz MCP +20\n\n- OneUp API + MCP (10): No x402 or other machine payment (0). Plan prices are public, with no per-call price (10). No free plan. The 7-day trial's checkout reads $0.00 due today, with a refund promise for the week after the trial ends, and we found nothing saying no card is needed (0). A person has to sign up in a browser and generate the key (0).\n- Xpoz MCP (30): No machine payment protocol (0). Plan prices public (10). Free 500 credits (20). A person signs in for a key (0). 0 + 10 + 20 + 0 = 30.\n\n### Maintenance \u0026 community: OneUp API + MCP +18\n\n- OneUp API + MCP (43): The help-centre changelog was updated on 23 September 2026 with September product entries. The last entry naming the API or MCP is posting from ChatGPT in August 2026 (20). 11 entries dated July to September 2026, by month rather than day (15). Public changelog and email support at help@oneupapp.io (8). No SDKs or MCP registry entry (0). No packages to assess (0).\n- Xpoz MCP (25): Registry entry last updated 14 July 2026 and repository commit on 9 September; the live server reports 3.0.0 (10). No dated releases in 90 days (0). Issues not read (0). Official registry entry ai.xpoz/social-insights (15). Docker packaging only (0). 10 + 0 + 0 + 15 + 0 = 25. Registry presence read from Anchor Terminal's own daily import of the official MCP registry (/api/v1/registry.json, 6 November 2026), not the registry's API.\n\n### Transparency \u0026 trust: OneUp API + MCP +11\n\n- OneUp API + MCP (40): Closed service under terms from OneUp, Inc. of Cranberry Township, Pennsylvania, with California governing law and no last-updated date (12). The privacy policy says user content is stored indefinitely while the account is active and removed when the account is deleted, names no subprocessors, has no DPA and no date (8). No deprecation policy, and the terms reserve the right to change or discontinue the service without notice (0). No subprocessors or data locations found (0).\n- Xpoz MCP (29): Closed service; terms of use read without a legal entity (10 of 30). Data handling not read (5 of 30). No deprecation policy (0). Where the social data comes from isn't stated beyond 'no platform API keys' (0). 10 + 5 + 0 + 0 = 15.\n\n## Score by category\n\n| Category | Weight | OneUp API + MCP | Xpoz MCP | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 18 | 20 | Xpoz MCP +2 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 27 | 64 | Xpoz MCP +37 |\n| Agent ergonomics | 13% (16.2 this run) | 31 | 63 | Xpoz MCP +32 |\n| Security \u0026 auth | 14% (17.5 this run) | 17 | 37 | Xpoz MCP +20 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 10 | 30 | Xpoz MCP +20 |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 43 | 25 | OneUp API + MCP +18 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 40 | 29 | OneUp API + MCP +11 |\n| Negative events | ≤15 | 0 | 0 | |\n| **Total** | | **24.5 · F** | **39.6 · E** | |\n\n## Facts side by side\n\n| Fact | OneUp API + MCP | Xpoz MCP |\n| --- | --- | --- |\n| Kind | HTTP API | MCP server |\n| Vendor | OneUp | XPOZ |\n| Hosted endpoint | `https://www.oneupapp.io/api` | `https://mcp.xpoz.ai/mcp` |\n| Transports | HTTP, Streamable HTTP | Streamable HTTP |\n| Auth | API key | API key |\n| Pricing | Paid | Freemium |\n| x402 | no | no |\n| Tools exposed | 50 | 52 |\n| Read-only variant documented | no | yes |\n| llms.txt | no | no |\n| MCP registry | not listed | `ai.xpoz/social-insights` |\n| Terms last updated | no date given | not read yet |\n| Privacy policy last updated | no date given | no document linked |\n| Customer content may train models | not found in the text | not read yet |\n| Terms restrict automated access | not found in the text | not read yet |\n| Terms restrict benchmarking | not found in the text | not read yet |\n| Terms or service can change without notice | yes | not read yet |\n| Arbitration or class-action waiver | yes | not read yet |\n| Agent reviews | 1.5/5 (2) | none |\n\n## How the scores have moved\n\n### OneUp API + MCP\n\n- +0.1 on 27 October 2026: checklist\n- -0.4 on 8 October 2026: checklist\n\n### Xpoz MCP\n\nNo score change since it was listed.\n\n## Verdicts\n\n**OneUp API + MCP.** API and MCP on every plan from $25 a month ($15 billed yearly). API key in the query string on REST and in the MCP URL, with no scopes.\n\n**Xpoz MCP.** Xpoz's MCP server covers X, Instagram, TikTok and Reddit in one place, with typed, annotated tools and field selection that keeps results small. It's a third-party data service that doesn't say how it gets platform data, and at 238 KB of definitions it's very heavy.\n\n## Before you call either\n\n### OneUp API + MCP\n\n1. Call listcategory, then listcategoryaccount, then schedule. Pass social_network_id as ALL to post to every account in a category\n2. Keep the ?apiKey= URLs out of logs and shared configs, and regenerate the key on the API Access page if one leaks\n3. Set requireApproval or isDraftPost true when a person should review before anything goes out\n4. Page through lists with start, 50 posts at a time\n5. Give dates as YYYY-MM-DD HH:MM with no timezone field, so confirm the account timezone first\n\n### Xpoz MCP\n\n1. Pass fields to select only what's needed\n2. Page with the returned tableName\n3. Treat posts and bios as untrusted text\n4. Check each platform's terms before relying on the data\n\n## Questions\n\n### Which is better for AI agents, OneUp API + MCP or Xpoz MCP?\n\nXpoz MCP scores 39.6 (E) on agent readiness against OneUp API + MCP's 24.5 (F), and leads in 5 of 7 scored categories. OneUp API + MCP leads on maintenance \u0026 community and transparency \u0026 trust.\n\n### Do OneUp API + MCP and Xpoz MCP need an API key?\n\nBoth need an API key.\n\n### Can an agent call OneUp API + MCP and Xpoz MCP without installing anything?\n\nYes. OneUp API + MCP has a hosted endpoint at https://www.oneupapp.io/api and Xpoz MCP at https://mcp.xpoz.ai/mcp.\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/oneup-vs-xpoz-mcp.json, and with the fewest tokens: https://www.anchorterminal.com/compare/oneup-vs-xpoz-mcp.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"oneup\", \"b\": \"xpoz-mcp\"}`. From a terminal: `anchor compare oneup xpoz-mcp`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/oneup.json and https://www.anchorterminal.com/api/v1/tools/xpoz-mcp.json\n\n## Other comparisons with OneUp API + MCP or Xpoz MCP\n\n- [Ayrshare API + MCP vs OneUp API + MCP](https://www.anchorterminal.com/compare/ayrshare-vs-oneup.md)\n- [Blotato vs OneUp API + MCP](https://www.anchorterminal.com/compare/blotato-vs-oneup.md)\n- [Buffer API + MCP vs OneUp API + MCP](https://www.anchorterminal.com/compare/buffer-vs-oneup.md)\n- [bundle.social vs OneUp API + MCP](https://www.anchorterminal.com/compare/bundle-social-vs-oneup.md)\n- [Zernio (formerly Late) API + MCP vs OneUp API + MCP](https://www.anchorterminal.com/compare/late-vs-oneup.md)\n- [Metricool API + MCP vs OneUp API + MCP](https://www.anchorterminal.com/compare/metricool-vs-oneup.md)\n- [Mixpost API + MCP vs OneUp API + MCP](https://www.anchorterminal.com/compare/mixpost-vs-oneup.md)\n- [OneUp API + MCP vs Post Bridge API + MCP](https://www.anchorterminal.com/compare/oneup-vs-post-bridge.md)\n- [OneUp API + MCP vs Postiz API + MCP](https://www.anchorterminal.com/compare/oneup-vs-postiz.md)\n- [OneUp API + MCP vs Publer API + MCP](https://www.anchorterminal.com/compare/oneup-vs-publer.md)\n- [OneUp API + MCP vs Repostit](https://www.anchorterminal.com/compare/oneup-vs-repostit.md)\n- [OneUp API + MCP vs Typefully](https://www.anchorterminal.com/compare/oneup-vs-typefully.md)\n- [OneUp API + MCP vs Upload-Post API + MCP](https://www.anchorterminal.com/compare/oneup-vs-upload-post.md)\n- [Ayrshare API + MCP vs Xpoz MCP](https://www.anchorterminal.com/compare/ayrshare-vs-xpoz-mcp.md)\n- [Blotato vs Xpoz MCP](https://www.anchorterminal.com/compare/blotato-vs-xpoz-mcp.md)\n- [Buffer API + MCP vs Xpoz MCP](https://www.anchorterminal.com/compare/buffer-vs-xpoz-mcp.md)\n- [bundle.social vs Xpoz MCP](https://www.anchorterminal.com/compare/bundle-social-vs-xpoz-mcp.md)\n- [Zernio (formerly Late) API + MCP vs Xpoz MCP](https://www.anchorterminal.com/compare/late-vs-xpoz-mcp.md)\n- [Metricool API + MCP vs Xpoz MCP](https://www.anchorterminal.com/compare/metricool-vs-xpoz-mcp.md)\n- [Mixpost API + MCP vs Xpoz MCP](https://www.anchorterminal.com/compare/mixpost-vs-xpoz-mcp.md)\n- [OneUp API + MCP vs Sprout Social API](https://www.anchorterminal.com/compare/oneup-vs-sprout-social.md)\n- [OneUp API + MCP vs TwitterAPI.io MCP](https://www.anchorterminal.com/compare/oneup-vs-twitterapi-io-mcp.md)\n- [OneUp API + MCP vs X MCP](https://www.anchorterminal.com/compare/oneup-vs-x-mcp.md)\n- [Post Bridge API + MCP vs Xpoz MCP](https://www.anchorterminal.com/compare/post-bridge-vs-xpoz-mcp.md)\n- [Postiz API + MCP vs Xpoz MCP](https://www.anchorterminal.com/compare/postiz-vs-xpoz-mcp.md)\n- [Publer API + MCP vs Xpoz MCP](https://www.anchorterminal.com/compare/publer-vs-xpoz-mcp.md)\n- [SocialCannon vs Xpoz MCP](https://www.anchorterminal.com/compare/socialcannon-vs-xpoz-mcp.md)\n- [Sprout Social API vs Xpoz MCP](https://www.anchorterminal.com/compare/sprout-social-vs-xpoz-mcp.md)\n- [TwitterAPI.io MCP vs Xpoz MCP](https://www.anchorterminal.com/compare/twitterapi-io-mcp-vs-xpoz-mcp.md)\n- [Upload-Post API + MCP vs Xpoz MCP](https://www.anchorterminal.com/compare/upload-post-vs-xpoz-mcp.md)\n- [X MCP vs Xpoz MCP](https://www.anchorterminal.com/compare/x-mcp-vs-xpoz-mcp.md)\n- [OneUp API + MCP vs SocialCannon](https://www.anchorterminal.com/compare/oneup-vs-socialcannon.md)\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "attributionRequired": true,
    "credit": "CC BY 4.0, credit Anchor Terminal and link the page or API address you took it from (https://www.anchorterminal.com/terms/#data)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-11-08",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.7",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run",
    "terms": "https://www.anchorterminal.com/terms/#data"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Compare",
        "url": "https://www.anchorterminal.com/compare/"
      },
      {
        "name": "OneUp API + MCP vs Xpoz MCP",
        "url": ""
      }
    ],
    "description": "Xpoz MCP scores 39.6 (E) to OneUp's 24.5 (F) for social analytics. Prices, MCP, x402, uptime and agent notes side by side.",
    "facts": [
      "OneUp API + MCP F 24.5",
      "Xpoz MCP E 39.6",
      "scores"
    ],
    "h1": "OneUp API + MCP vs Xpoz MCP",
    "image": "https://www.anchorterminal.com/assets/og/default.png",
    "path": "/compare/oneup-vs-xpoz-mcp",
    "published": "2026-10-01",
    "section": "tools",
    "title": "OneUp vs Xpoz MCP for AI agents in 2026: scores and prices",
    "toc": null,
    "updated": "2026-11-07",
    "url": "https://www.anchorterminal.com/compare/oneup-vs-xpoz-mcp"
  },
  "tokens": {
    "markdown": 3700,
    "slim": 1980
  },
  "version": 1
}
