Surgemesh
Agent-first social publishing: connect channels, quote, and schedule posts across networks.
Should I use this
Quality & Safety
Findings (10)
- MEDIUMin get_topup_link
- MEDIUMin create_checkout_link
- MEDIUMin get_referral_code
- MEDIUMin list_networks
- MEDIUMin connect_channel
- LOWin get_pricing
- LOWin list_posts
- LOWin get_verification
- LOWin get_connect_status
- LOWin disconnect_channel
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"surgemesh": {
"url": "https://api.surgemesh.com/mcp"
}
}
}Remote endpoints
https://api.surgemesh.com/mcpstreamable-httpWhat it can do
Tool inventory
Tools (24)
🟢get_pricing
Surgemesh prices: base per delivery, a hard ceiling (never more than $0.06 per delivery), time-of-day pricing (quieter times cost less, busier times cost more), credit packs. No auth needed.
Input Schema
{
"type": "object",
"properties": {},
"required": [],
"additionalProperties": false
}🟡get_quote(scheduled_at, deliveries)
Exact price quote (locks at post acceptance; guard with max_price_usd) for N deliveries at scheduled_at, with cheaper_times (nearby times and their exact prices) when a nearby time costs less.
Input Schema
{
"type": "object",
"properties": {
"scheduled_at": {
"type": "string",
"format": "date-time"
},
"deliveries": {
"type": "integer",
"minimum": 1,
"maximum": 20
}
},
"required": [
"scheduled_at"
],
"additionalProperties": false
}🟡list_channels
Channels (connected social accounts) this key can post to.
Input Schema
{
"type": "object",
"properties": {},
"required": [],
"additionalProperties": false
}🟢list_brands
Brands in this account.
Input Schema
{
"type": "object",
"properties": {},
"required": [],
"additionalProperties": false
}🟡create_post(idempotency_key, brand_id, body, media_urls, scheduled_at, ...)
Schedule a post to one or more channels. idempotency_key is required; retries with the same key never double-post or double-charge. Optional max_price_usd refuses a price above your cap. Preview: posts are validated and priced in the sandbox, not published yet.
Input Schema
{
"type": "object",
"properties": {
"idempotency_key": {
"type": "string",
"minLength": 8,
"maxLength": 128
},
"brand_id": {
"type": "string"
},
"body": {
"type": "string",
"maxLength": 5000
},
"media_urls": {
"type": "array",
"items": {
"type": "string",
"format": "uri"
},
"maxItems": 10
},
"scheduled_at": {
"type": "string",
"format": "date-time"
},
"channels": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"maxItems": 20
},
"max_price_usd": {
"type": "number"
}
},
"required": [
"idempotency_key",
"brand_id",
"body",
"scheduled_at",
"channels"
],
"additionalProperties": false
}🟢list_posts(brand_id)
Recent posts for a brand with per-channel delivery state.
Input Schema
{
"type": "object",
"properties": {
"brand_id": {
"type": "string"
}
},
"required": [
"brand_id"
],
"additionalProperties": false
}🔴cancel_post(id)
Cancel a queued post. Undelivered deliveries are refunded to credit.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "string"
}
},
"required": [
"id"
],
"additionalProperties": false
}🟡get_topup_link(pack, rail)
Coming soon (payments are not enabled yet). Payment link to buy a credit pack (pack_5 $5, pack_20 $20, pack_100 $100; each pack buys exactly its price in credit). Rails: mpp_card (card via Stripe Shared Payment Token), mpp_stablecoin (USDC.e on Tempo, USDC on Solana), x402 (USDC on Base); each shows live or coming_soon. POST to paymentLink with your Bearer key, pay the 402 challenge, retry. No payment happens in this tool.
Input Schema
{
"type": "object",
"properties": {
"pack": {
"type": "string",
"enum": [
"pack_5",
"pack_20",
"pack_100"
]
},
"rail": {
"type": "string",
"enum": [
"mpp_card",
"mpp_stablecoin",
"x402"
]
}
},
"required": [
"pack"
],
"additionalProperties": false
}🟡create_checkout_link(pack, idempotency_key)
Card checkout for a human (coming soon): returns a Stripe-hosted checkout_url for a credit pack (pack_5 $5, pack_20 $20, pack_100 $100; each pack buys exactly its price in credit). Give the link to the person paying; credits arrive only after Stripe confirms. Verified owners, admin key. 503 checkout_not_enabled until switched on.
Input Schema
{
"type": "object",
"properties": {
"pack": {
"type": "string",
"enum": [
"pack_5",
"pack_20",
"pack_100"
]
},
"idempotency_key": {
"type": "string",
"minLength": 8,
"maxLength": 128,
"description": "Optional. Reuse on retries so the action happens once."
}
},
"required": [
"pack"
],
"additionalProperties": false
}🟢get_referral_code
Your referral code, share link and stats (referred signups, qualified, credits earned and pending). Referral rewards are Surgemesh credits only, never cash, and are coming soon; codes can be shared now. Verified owners only.
Input Schema
{
"type": "object",
"properties": {},
"required": [],
"additionalProperties": false
}🟢get_usage
Account plan, credits and recent ledger.
Input Schema
{
"type": "object",
"properties": {},
"required": [],
"additionalProperties": false
}🟢get_onboarding
Onboarding status: verification state, remaining steps and the exact next call. Start here after signup.
Input Schema
{
"type": "object",
"properties": {},
"required": [],
"additionalProperties": false
}⚪start_email_verification(idempotency_key)
Email a 6-digit code to the account email (expires in 10 minutes, 5 attempts). Then call confirm_email_verification with the code.
Input Schema
{
"type": "object",
"properties": {
"idempotency_key": {
"type": "string",
"minLength": 8,
"maxLength": 128,
"description": "Optional. Reuse on retries so the action happens once."
}
},
"required": [],
"additionalProperties": false
}🟡confirm_email_verification(verification_id, code)
Submit the 6-digit code from the verification email.
Input Schema
{
"type": "object",
"properties": {
"verification_id": {
"type": "string"
},
"code": {
"type": "string",
"pattern": "^[0-9 -]{6,9}$"
}
},
"required": [
"verification_id",
"code"
],
"additionalProperties": false
}🟡start_dns_verification(domain, idempotency_key)
Get a TXT record to publish on the account email domain (or a parent domain). Then call check_dns_verification.
Input Schema
{
"type": "object",
"properties": {
"domain": {
"type": "string"
},
"idempotency_key": {
"type": "string",
"minLength": 8,
"maxLength": 128,
"description": "Optional. Reuse on retries so the action happens once."
}
},
"required": [
"domain"
],
"additionalProperties": false
}🟢check_dns_verification(verification_id)
Check whether the TXT record is visible; verifies the account when it is.
Input Schema
{
"type": "object",
"properties": {
"verification_id": {
"type": "string"
}
},
"required": [
"verification_id"
],
"additionalProperties": false
}🟢request_owner_approval(note, callback_url, idempotency_key)
Email the account owner a one-tap Approve link (24 h, single use). Poll get_verification until verified or denied.
Input Schema
{
"type": "object",
"properties": {
"note": {
"type": "string",
"maxLength": 200
},
"callback_url": {
"type": "string",
"format": "uri"
},
"idempotency_key": {
"type": "string",
"minLength": 8,
"maxLength": 128,
"description": "Optional. Reuse on retries so the action happens once."
}
},
"required": [],
"additionalProperties": false
}🟢get_verification(verification_id)
Status of one verification (pending, verified, expired, failed, denied).
Input Schema
{
"type": "object",
"properties": {
"verification_id": {
"type": "string"
}
},
"required": [
"verification_id"
],
"additionalProperties": false
}⚪rotate_my_key(grace_seconds, idempotency_key)
Rotate the calling key: returns a new key (shown once) with the same scopes; the old key keeps working for grace_seconds (default 3600, 0 = revoke now).
Input Schema
{
"type": "object",
"properties": {
"grace_seconds": {
"type": "integer",
"minimum": 0,
"maximum": 86400
},
"idempotency_key": {
"type": "string",
"minLength": 8,
"maxLength": 128,
"description": "Optional. Reuse on retries so the action happens once."
}
},
"required": [],
"additionalProperties": false
}🟢list_networks
Every supported network: status (available, connect_pending_review, connect_pending_setup), how to connect it, review limits and media limits (connect_pending_setup = coming soon). No auth needed.
Input Schema
{
"type": "object",
"properties": {},
"required": [],
"additionalProperties": false
}🟢connect_channel(brand_id, network, label, options)
Start a one-tap connect for a brand on an OAuth or app-password network (networks marked coming soon in list_networks are refused). Returns connect_url: give it to the account owner to open once. Then poll get_connect_status.
Input Schema
{
"type": "object",
"properties": {
"brand_id": {
"type": "string"
},
"network": {
"type": "string",
"enum": [
"threads",
"youtube",
"linkedin",
"tiktok",
"pinterest",
"bluesky"
]
},
"label": {
"type": "string",
"maxLength": 80
},
"options": {
"type": "object",
"description": "Network options listed by list_networks (e.g. board_id, organization_id)",
"additionalProperties": {
"type": "string"
}
}
},
"required": [
"brand_id",
"network"
],
"additionalProperties": false
}🟢get_connect_status(connect_id)
Status of a connect session: pending, connected (with channel_id), failed or expired.
Input Schema
{
"type": "object",
"properties": {
"connect_id": {
"type": "string"
}
},
"required": [
"connect_id"
],
"additionalProperties": false
}⚪disconnect_channel(channel_id)
Disconnect a channel: erases its stored credentials and revokes the provider token where the network supports it.
Input Schema
{
"type": "object",
"properties": {
"channel_id": {
"type": "string"
}
},
"required": [
"channel_id"
],
"additionalProperties": false
}🟢get_analytics(from, to, granularity, brand_id)
Posts, deliveries, published, failed and spend over time (UTC), with a per-brand breakdown.
Input Schema
{
"type": "object",
"properties": {
"from": {
"type": "string",
"format": "date"
},
"to": {
"type": "string",
"format": "date"
},
"granularity": {
"type": "string",
"enum": [
"day",
"week",
"month"
]
},
"brand_id": {
"type": "string"
}
},
"required": [],
"additionalProperties": false
}Community
Evidence