Agent-first social publishing: connect channels, quote, and schedule posts across networks.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Bearer sm_... API key. Get one free with POST https://api.surgemesh.com/v1/signup
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Cancel a queued post. Undelivered deliveries are refunded to credit.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Cancel a queued post. Undelivered deliveries are refunded to credit.
| Argument | Type | Description |
|---|---|---|
| id* | string |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
}
},
"additionalProperties": false
}Check whether the TXT record is visible; verifies the account when it is.
| Argument | Type | Description |
|---|---|---|
| verification_id* | string |
{
"type": "object",
"required": [
"verification_id"
],
"properties": {
"verification_id": {
"type": "string"
}
},
"additionalProperties": false
}Submit the 6-digit code from the verification email.
| Argument | Type | Description |
|---|---|---|
| code* | string | |
| verification_id* | string |
{
"type": "object",
"required": [
"verification_id",
"code"
],
"properties": {
"code": {
"type": "string",
"pattern": "^[0-9 -]{6,9}$"
},
"verification_id": {
"type": "string"
}
},
"additionalProperties": false
}Start a one-tap connect for a brand on an OAuth or app-password network. Returns connect_url: give it to the account owner to open once. Then poll get_connect_status.
| Argument | Type | Description |
|---|---|---|
| label | string | |
| network* | string | |
| options | object | Network options listed by list_networks (e.g. board_id, organization_id) |
| brand_id* | string |
{
"type": "object",
"required": [
"brand_id",
"network"
],
"properties": {
"label": {
"type": "string",
"maxLength": 80
},
"network": {
"enum": [
"threads",
"youtube",
"linkedin",
"x",
"tiktok",
"pinterest",
"bluesky"
],
"type": "string"
},
"options": {
"type": "object",
"description": "Network options listed by list_networks (e.g. board_id, organization_id)",
"additionalProperties": {
"type": "string"
}
},
"brand_id": {
"type": "string"
}
},
"additionalProperties": false
}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 surge above your cap.
| Argument | Type | Description |
|---|---|---|
| body* | string | |
| brand_id* | string | |
| channels* | array | |
| media_urls | array | |
| scheduled_at* | string | |
| max_price_usd | number | |
| idempotency_key* | string |
{
"type": "object",
"required": [
"idempotency_key",
"brand_id",
"body",
"scheduled_at",
"channels"
],
"properties": {
"body": {
"type": "string",
"maxLength": 5000
},
"brand_id": {
"type": "string"
},
"channels": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 20,
"minItems": 1
},
"media_urls": {
"type": "array",
"items": {
"type": "string",
"format": "uri"
},
"maxItems": 10
},
"scheduled_at": {
"type": "string",
"format": "date-time"
},
"max_price_usd": {
"type": "number"
},
"idempotency_key": {
"type": "string",
"maxLength": 128,
"minLength": 8
}
},
"additionalProperties": false
}Disconnect a channel: erases its stored credentials and revokes the provider token where the network supports it.
| Argument | Type | Description |
|---|---|---|
| channel_id* | string |
{
"type": "object",
"required": [
"channel_id"
],
"properties": {
"channel_id": {
"type": "string"
}
},
"additionalProperties": false
}Posts, deliveries, published, failed, spend and dynamic-pricing usage over time (UTC), with a per-brand breakdown.
| Argument | Type | Description |
|---|---|---|
| to | string | |
| from | string | |
| brand_id | string | |
| granularity | string |
{
"type": "object",
"required": [],
"properties": {
"to": {
"type": "string",
"format": "date"
},
"from": {
"type": "string",
"format": "date"
},
"brand_id": {
"type": "string"
},
"granularity": {
"enum": [
"day",
"week",
"month"
],
"type": "string"
}
},
"additionalProperties": false
}Status of a connect session: pending, connected (with channel_id), failed or expired.
| Argument | Type | Description |
|---|---|---|
| connect_id* | string |
{
"type": "object",
"required": [
"connect_id"
],
"properties": {
"connect_id": {
"type": "string"
}
},
"additionalProperties": false
}Onboarding status: verification state, remaining steps and the exact next call. Start here after signup.
No arguments.
{
"type": "object",
"required": [],
"properties": {},
"additionalProperties": false
}Surgemesh prices: base per delivery, dynamic pricing rules, credit packs. No auth needed.
No arguments.
{
"type": "object",
"required": [],
"properties": {},
"additionalProperties": false
}Price quote (locks at post acceptance; guard with max_price_usd) for N deliveries in the 15-minute slot of scheduled_at, with cheaper nearby slots when surging.
| Argument | Type | Description |
|---|---|---|
| deliveries | integer | |
| scheduled_at* | string |
{
"type": "object",
"required": [
"scheduled_at"
],
"properties": {
"deliveries": {
"type": "integer",
"maximum": 20,
"minimum": 1
},
"scheduled_at": {
"type": "string",
"format": "date-time"
}
},
"additionalProperties": false
}Payment link to buy a credit pack (pack_5 $5, pack_20 $20 -> $22, pack_100 $100 -> $120). 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.
| Argument | Type | Description |
|---|---|---|
| pack* | string | |
| rail | string |
{
"type": "object",
"required": [
"pack"
],
"properties": {
"pack": {
"enum": [
"pack_5",
"pack_20",
"pack_100"
],
"type": "string"
},
"rail": {
"enum": [
"mpp_card",
"mpp_stablecoin",
"x402"
],
"type": "string"
}
},
"additionalProperties": false
}Account plan, credits, free deliveries left, and recent ledger.
No arguments.
{
"type": "object",
"required": [],
"properties": {},
"additionalProperties": false
}Status of one verification (pending, verified, expired, failed, denied).
| Argument | Type | Description |
|---|---|---|
| verification_id* | string |
{
"type": "object",
"required": [
"verification_id"
],
"properties": {
"verification_id": {
"type": "string"
}
},
"additionalProperties": false
}Brands in this account.
No arguments.
{
"type": "object",
"required": [],
"properties": {},
"additionalProperties": false
}Channels (connected social accounts) this key can post to.
No arguments.
{
"type": "object",
"required": [],
"properties": {},
"additionalProperties": false
}Every supported network: status (available, connect_pending_review, connect_pending_setup), how to connect it, review limits, cost notes and media limits. No auth needed.
No arguments.
{
"type": "object",
"required": [],
"properties": {},
"additionalProperties": false
}Recent posts for a brand with per-channel delivery state.
| Argument | Type | Description |
|---|---|---|
| brand_id* | string |
{
"type": "object",
"required": [
"brand_id"
],
"properties": {
"brand_id": {
"type": "string"
}
},
"additionalProperties": false
}Email the account owner a one-tap Approve link (24 h, single use). Poll get_verification until verified or denied.
| Argument | Type | Description |
|---|---|---|
| note | string | |
| callback_url | string | |
| idempotency_key | string | Optional. Reuse on retries so the action happens once. |
{
"type": "object",
"required": [],
"properties": {
"note": {
"type": "string",
"maxLength": 200
},
"callback_url": {
"type": "string",
"format": "uri"
},
"idempotency_key": {
"type": "string",
"maxLength": 128,
"minLength": 8,
"description": "Optional. Reuse on retries so the action happens once."
}
},
"additionalProperties": false
}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).
| Argument | Type | Description |
|---|---|---|
| grace_seconds | integer | |
| idempotency_key | string | Optional. Reuse on retries so the action happens once. |
{
"type": "object",
"required": [],
"properties": {
"grace_seconds": {
"type": "integer",
"maximum": 86400,
"minimum": 0
},
"idempotency_key": {
"type": "string",
"maxLength": 128,
"minLength": 8,
"description": "Optional. Reuse on retries so the action happens once."
}
},
"additionalProperties": false
}Get a TXT record to publish on the account email domain (or a parent domain). Then call check_dns_verification.
| Argument | Type | Description |
|---|---|---|
| domain* | string | |
| idempotency_key | string | Optional. Reuse on retries so the action happens once. |
{
"type": "object",
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string"
},
"idempotency_key": {
"type": "string",
"maxLength": 128,
"minLength": 8,
"description": "Optional. Reuse on retries so the action happens once."
}
},
"additionalProperties": false
}Email a 6-digit code to the account email (expires in 10 minutes, 5 attempts). Then call confirm_email_verification with the code.
| Argument | Type | Description |
|---|---|---|
| idempotency_key | string | Optional. Reuse on retries so the action happens once. |
{
"type": "object",
"required": [],
"properties": {
"idempotency_key": {
"type": "string",
"maxLength": 128,
"minLength": 8,
"description": "Optional. Reuse on retries so the action happens once."
}
},
"additionalProperties": false
}