WoopSocial publishes and schedules posts to Facebook, Instagram, Threads, LinkedIn, Bluesky, X/Twitter, Pinterest, TikTok and YouTube, and reports how those posts performed.
Everything belongs to the organization of the signed-in user (`me_get`). Social accounts, posts and media are grouped into projects.
To post:
1. Find the project with `projects_list` and the target accounts with `social_accounts_list`. Only accounts with `status: CONNECTED` can publish, and all accounts in one post must belong to the same project.
2. For platform options such as a Pinterest board or a TikTok privacy setting, call `social_accounts_get_platform_inputs`.
3. Reuse media from `media_list` when it fits. For new media, call `media_uploads_create_session`, upload every part, then call `media_uploads_complete_session`.
4. When unsure the content fits a platform's rules, call `posts_validate` and fix every error it reports. Then call `posts_create`.
5. Creating a post doesn't mean it was published. Report the delivery state from `posts_get` or `social_account_posts_list`.
For performance, use `social_account_posts_list_analytics` for posts sent through WoopSocial and `social_accounts_get_analytics` for account-level metrics. Metrics refresh about once a day.
If your client can't load a tool's full input schema, use its `_simple` variant together with `schema_describe`.
Call delete tools only when the user explicitly asks.
Discoverability
2 pass · 1 partial2 passed · 1 partial42/100
Client listings and public setup information.
mcp.json or server-card.json
Either mcp.json or an MCP Server Card declaring this endpoint passes.
The MCP Server Card declares this server's exact endpoint.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
Returns the email of the WoopSocial user this connection acts as: the
user who approved the OAuth connection, or who created the API key.
Use it to tell which WoopSocial account a connection is signed in with.
The description explains the capability, when to use it, and what to expect.
Inputs100/100
This tool declares no inputs, so argument descriptions are not needed.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "me_get",
"title": "Get current user",
"description": "Returns the email of the WoopSocial user this connection acts as: the\nuser who approved the OAuth connection, or who created the API key.\n\nUse it to tell which WoopSocial account a connection is signed in with.\n",
"inputSchema": {
"type": "object"
},
"annotations": {
"title": "Get current user",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "media_list",
"title": "List media",
"description": "Returns media library items that belong to the API key's organization.\n\nWhen `projectId` is provided, only media in that project is returned.\n",
"inputSchema": {
"type": "object",
"properties": {
"limit": {
"type": "integer",
"format": "int32",
"default": 50,
"maximum": 100,
"minimum": 1,
"description": "Number of items to return."
},
"cursor": {
"type": "string",
"description": "Opaque cursor for the next page of results."
},
"mediaId": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter to one or more media items. Provide a comma-separated list of media IDs."
},
"projectId": {
"type": "string",
"description": "Filter to resources that belong to a specific project."
}
}
},
"annotations": {
"title": "List media",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
This endpoint can be used to upload both smaller and larger files (up to 5GB) in a chunked manner.
Calling this creates an upload session and returns presigned URLs for uploading the file in parts.
Upload the file in `partCount` parts by sending an HTTP PUT with the raw bytes of each part to the matching
`parts[n].uploadUrl`. Every part except the last must be exactly `partSizeInBytes` bytes. The last part may be smaller.
After all parts have been uploaded, call `media_uploads_complete_session` to finalize the upload and create the media item.
The presigned URLs expire at `expiresAt`.
Uploading the parts requires making HTTP requests yourself (for example with curl in a shell or code execution tool).
If you cannot make HTTP requests, tell the user the upload is not possible from this client.
The presigned URLs are hosted on Cloudflare R2 (`<account-id>.r2.cloudflarestorage.com`).
If a network allowlist blocks the PUT, ask the user to allow `*.r2.cloudflarestorage.com`:
- claude.ai / Claude Desktop chat: Settings > Capabilities, in the code execution network settings.
- Claude Code: the sandbox's allowed network domains in settings.json.
Describe the returned information so the agent knows whether it will answer the request.
Inputs75/100
Explain the meaning of this value, not just its name.
fileSizeInBytes
Total size of the file that will be uploaded.
Clear enough to supply this argument.
projectId
Project that will own the uploaded media.
Explain the meaning of this value, not just its name.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "media_uploads_create_session",
"title": "Start media upload session",
"description": "This endpoint can be used to upload both smaller and larger files (up to 5GB) in a chunked manner.\nCalling this creates an upload session and returns presigned URLs for uploading the file in parts.\n\nUpload the file in `partCount` parts by sending an HTTP PUT with the raw bytes of each part to the matching\n`parts[n].uploadUrl`. Every part except the last must be exactly `partSizeInBytes` bytes. The last part may be smaller.\nAfter all parts have been uploaded, call `media_uploads_complete_session` to finalize the upload and create the media item.\nThe presigned URLs expire at `expiresAt`.\n\nUploading the parts requires making HTTP requests yourself (for example with curl in a shell or code execution tool).\nIf you cannot make HTTP requests, tell the user the upload is not possible from this client.\n\nThe presigned URLs are hosted on Cloudflare R2 (`<account-id>.r2.cloudflarestorage.com`).\nIf a network allowlist blocks the PUT, ask the user to allow `*.r2.cloudflarestorage.com`:\n- claude.ai / Claude Desktop chat: Settings > Capabilities, in the code execution network settings.\n- Claude Code: the sandbox's allowed network domains in settings.json.",
"inputSchema": {
"type": "object",
"required": [
"projectId",
"fileSizeInBytes"
],
"properties": {
"projectId": {
"type": "string",
"description": "Project that will own the uploaded media."
},
"fileSizeInBytes": {
"type": "integer",
"format": "int64",
"maximum": 5368709120,
"minimum": 1,
"description": "Total size of the file that will be uploaded."
}
},
"additionalProperties": false
},
"annotations": {
"title": "Start media upload session",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description92/100
Generates a browser authorization URL for connecting a new social account to a project.
Flow:
1. Call this tool with the `projectId` and target `platform`. Omit `redirectUrl` unless the user asks for one.
2. Give the returned `url` to the user and ask them to open it in their browser and complete the authorization.
3. Once the user says they are done, call `social_accounts_list` with the `projectId` to confirm the connected account.
For Facebook, WoopSocial shows a page-selection screen after authorization. The selected pages are connected to the `projectId`.
Describe the returned information so the agent knows whether it will answer the request.
Inputs75/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
platform
Identifies which social media platform this data structure targets.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
projectId
Project identifier.
Explain the meaning of this value, not just its name.
redirectUrl
Optional URL in your application to return the browser to after OAuth completes.
Use this for multi-user integrations where your users connect their own social
accounts through your app. WoopSocial appends OAuth result query parameters to
this URL so your app can finish the connection flow.
The redirect does not include tokens or credentials.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "oauth_create_authorization",
"title": "Generate OAuth URL",
"description": "Generates a browser authorization URL for connecting a new social account to a project.\n\nFlow:\n1. Call this tool with the `projectId` and target `platform`. Omit `redirectUrl` unless the user asks for one.\n2. Give the returned `url` to the user and ask them to open it in their browser and complete the authorization.\n3. Once the user says they are done, call `social_accounts_list` with the `projectId` to confirm the connected account.\n\nFor Facebook, WoopSocial shows a page-selection screen after authorization. The selected pages are connected to the `projectId`.",
"inputSchema": {
"type": "object",
"required": [
"projectId",
"platform"
],
"properties": {
"platform": {
"enum": [
"PINTEREST",
"LINKEDIN",
"LINKEDIN_PAGES",
"INSTAGRAM",
"FACEBOOK",
"THREADS",
"TIKTOK",
"X",
"YOUTUBE",
"BLUESKY",
"WOOPTEST"
],
"type": "string",
"description": "Identifies which social media platform this data structure targets.\n"
},
"projectId": {
"type": "string",
"description": "Project identifier."
},
"redirectUrl": {
"type": "string",
"format": "uri",
"description": "Optional URL in your application to return the browser to after OAuth completes.\n\nUse this for multi-user integrations where your users connect their own social\naccounts through your app. WoopSocial appends OAuth result query parameters to\nthis URL so your app can finish the connection flow.\n\nThe redirect does not include tokens or credentials.\n"
}
},
"additionalProperties": false
},
"annotations": {
"title": "Generate OAuth URL",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description80/100
Creates a (parent) post with one or more social account (child) posts.
All referenced social accounts must belong to the same project.
The request is validated atomically. If any social account fails validation, the post is not created.
Explain mutations, irreversible effects, or prerequisites that matter before calling this tool.
Inputs60/100
68 of 96 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
autoDeleteMediaAfterPublish
When true, all media referenced by this post is automatically
deleted from the media library after all social account deliveries
for the post have published successfully.
Clear enough to supply this argument.
content › items › media › items › mediaId
Media library item identifier, returned by `media_uploads_complete_session` or listed by `media_list`.
Clear enough to supply this argument.
content › items › media › items › type
Not provided
Missing description. Explain what this value means and how to supply it.
content › items › text
Text content for this thread item.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
retryPolicy › delaySeconds
Minimum wait after each failure before the retry is published.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
retryPolicy › maxRetries
Maximum automatic retries per target, excluding the original attempt.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
schedule › oneOf › 0 › type
Not provided
Missing description. Explain what this value means and how to supply it.
schedule › oneOf › 1 › type
Not provided
Missing description. Explain what this value means and how to supply it.
schedule › oneOf › 2 › scheduledFor
UTC time (ISO 8601) when the post should be published. The value must be in the future.
Clear enough to supply this argument.
schedule › oneOf › 2 › type
Not provided
Missing description. Explain what this value means and how to supply it.
Whether the Instagram post contains AI-generated content. When true, Instagram shows its "AI info" label on the post.
Instagram only accepts this flag when the post is created, so it can't be added after publishing.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
socialAccounts › items › oneOf › 2 › platform
Identifies which social media platform this data structure targets.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
socialAccounts › items › oneOf › 2 › postType
Not provided
Missing description. Explain what this value means and how to supply it.
Controls how a Trial Reel graduates to followers. `MANUAL` leaves graduation
to the user in Instagram. `SS_PERFORMANCE` lets Instagram graduate the Reel
automatically based on its performance.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Whether comments should be allowed for this TikTok post.
Clear enough to supply this argument.
socialAccounts › items › oneOf › 7 › allowDuet
Whether duets should be allowed for this TikTok post.
This field applies to `postType=VIDEO`.
When `postType=PHOTO`, this field is required by the API contract
but is not used by TikTok.
Clear enough to supply this argument.
socialAccounts › items › oneOf › 7 › allowStitch
Whether stitches should be allowed for this TikTok post.
This field applies to `postType=VIDEO`.
When `postType=PHOTO`, this field is required by the API contract
but is not used by TikTok.
Clear enough to supply this argument.
socialAccounts › items › oneOf › 7 › autoAddMusic
Whether TikTok should automatically add music to this post.
This field applies to `postType=PHOTO`.
When `postType=VIDEO`, this field is required by the API contract
but is not used by TikTok.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
socialAccounts › items › oneOf › 10 › category
YouTube video category ID, a number sent as a string, such as `22` (People & Blogs) or `24` (Entertainment).
Category names such as `Entertainment` are rejected. Leave it out to let YouTube pick the category.
Categories available in every region:
`1` Film & Animation, `2` Autos & Vehicles, `10` Music, `15` Pets & Animals, `17` Sports,
`19` Travel & Events, `20` Gaming, `22` People & Blogs, `23` Comedy, `24` Entertainment,
`25` News & Politics, `26` Howto & Style, `27` Education, `28` Science & Technology.
`29` Nonprofits & Activism is available only for US channels.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Align the title with the capability actually described by this tool.
Description82/100
Compatibility workaround for MCP clients that cannot load the full `posts_create` input schema. This is not a simplified input format and uses the same validation and behavior as `posts_create`. Prefer `posts_create` when available. To call this fallback: call `schema_describe` with `toolName: "posts_create_simple"`, construct an object matching the returned canonical schema, JSON-encode the entire object, and pass that string as `requestJson`. Do not pass canonical fields such as `content`, `schedule`, or `socialAccounts` directly to this tool.
The description explains the capability, when to use it, and what to expect.
Inputs83/100
Input documentation gives an agent enough context to populate the arguments.
requestJson
JSON-encoded object conforming to the canonical input schema returned by schema_describe.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "posts_create_simple",
"title": "Create post",
"description": "Compatibility workaround for MCP clients that cannot load the full `posts_create` input schema. This is not a simplified input format and uses the same validation and behavior as `posts_create`. Prefer `posts_create` when available. To call this fallback: call `schema_describe` with `toolName: \"posts_create_simple\"`, construct an object matching the returned canonical schema, JSON-encode the entire object, and pass that string as `requestJson`. Do not pass canonical fields such as `content`, `schedule`, or `socialAccounts` directly to this tool.",
"inputSchema": {
"type": "object",
"required": [
"requestJson"
],
"properties": {
"requestJson": {
"type": "string",
"description": "JSON-encoded object conforming to the canonical input schema returned by schema_describe."
}
},
"additionalProperties": false
},
"annotations": {
"title": "Create post",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": true
}
}
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "posts_delete",
"title": "Delete post",
"description": "Deletes one scheduled post by post ID.\n\nA post can only be deleted when all of its social account deliveries are\nstill `NOT_STARTED`.\n",
"inputSchema": {
"type": "object",
"required": [
"postId"
],
"properties": {
"postId": {
"type": "string",
"description": "Post identifier."
}
}
},
"annotations": {
"title": "Delete post",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description71/100
Validates a post without creating one.
This tool applies the same validation rules as `posts_create`,
including social account resolution, platform-specific validation, and
media validation for referenced media library items.
Describe the returned information so the agent knows whether it will answer the request.
Inputs61/100
68 of 96 inputs have descriptions. Add descriptions to the missing inputs, including where to obtain IDs and how to supply values.
autoDeleteMediaAfterPublish
When true, all media referenced by this post is automatically
deleted from the media library after all social account deliveries
for the post have published successfully.
Clear enough to supply this argument.
content › items › media › items › mediaId
Media library item identifier, returned by `media_uploads_complete_session` or listed by `media_list`.
Clear enough to supply this argument.
content › items › media › items › type
Not provided
Missing description. Explain what this value means and how to supply it.
content › items › text
Text content for this thread item.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
retryPolicy › delaySeconds
Minimum wait after each failure before the retry is published.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
retryPolicy › maxRetries
Maximum automatic retries per target, excluding the original attempt.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
schedule › oneOf › 0 › type
Not provided
Missing description. Explain what this value means and how to supply it.
schedule › oneOf › 1 › type
Not provided
Missing description. Explain what this value means and how to supply it.
schedule › oneOf › 2 › scheduledFor
UTC time (ISO 8601) when the post should be published. The value must be in the future.
Clear enough to supply this argument.
schedule › oneOf › 2 › type
Not provided
Missing description. Explain what this value means and how to supply it.
Whether the Instagram post contains AI-generated content. When true, Instagram shows its "AI info" label on the post.
Instagram only accepts this flag when the post is created, so it can't be added after publishing.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
socialAccounts › items › oneOf › 2 › platform
Identifies which social media platform this data structure targets.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
socialAccounts › items › oneOf › 2 › postType
Not provided
Missing description. Explain what this value means and how to supply it.
Controls how a Trial Reel graduates to followers. `MANUAL` leaves graduation
to the user in Instagram. `SS_PERFORMANCE` lets Instagram graduate the Reel
automatically based on its performance.
Whether comments should be allowed for this TikTok post.
Clear enough to supply this argument.
socialAccounts › items › oneOf › 7 › allowDuet
Whether duets should be allowed for this TikTok post.
This field applies to `postType=VIDEO`.
When `postType=PHOTO`, this field is required by the API contract
but is not used by TikTok.
Clear enough to supply this argument.
socialAccounts › items › oneOf › 7 › allowStitch
Whether stitches should be allowed for this TikTok post.
This field applies to `postType=VIDEO`.
When `postType=PHOTO`, this field is required by the API contract
but is not used by TikTok.
Clear enough to supply this argument.
socialAccounts › items › oneOf › 7 › autoAddMusic
Whether TikTok should automatically add music to this post.
This field applies to `postType=PHOTO`.
When `postType=VIDEO`, this field is required by the API contract
but is not used by TikTok.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
socialAccounts › items › oneOf › 10 › category
YouTube video category ID, a number sent as a string, such as `22` (People & Blogs) or `24` (Entertainment).
Category names such as `Entertainment` are rejected. Leave it out to let YouTube pick the category.
Categories available in every region:
`1` Film & Animation, `2` Autos & Vehicles, `10` Music, `15` Pets & Animals, `17` Sports,
`19` Travel & Events, `20` Gaming, `22` People & Blogs, `23` Comedy, `24` Entertainment,
`25` News & Politics, `26` Howto & Style, `27` Education, `28` Science & Technology.
`29` Nonprofits & Activism is available only for US channels.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description79/100
Compatibility workaround for MCP clients that cannot load the full `posts_validate` input schema. This is not a simplified input format and uses the same validation and behavior as `posts_validate`. Prefer `posts_validate` when available. To call this fallback: call `schema_describe` with `toolName: "posts_validate_simple"`, construct an object matching the returned canonical schema, JSON-encode the entire object, and pass that string as `requestJson`. Do not pass canonical fields such as `content`, `schedule`, or `socialAccounts` directly to this tool.
The description explains the capability, when to use it, and what to expect.
Inputs81/100
Input documentation gives an agent enough context to populate the arguments.
requestJson
JSON-encoded object conforming to the canonical input schema returned by schema_describe.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "posts_validate_simple",
"title": "Validate post",
"description": "Compatibility workaround for MCP clients that cannot load the full `posts_validate` input schema. This is not a simplified input format and uses the same validation and behavior as `posts_validate`. Prefer `posts_validate` when available. To call this fallback: call `schema_describe` with `toolName: \"posts_validate_simple\"`, construct an object matching the returned canonical schema, JSON-encode the entire object, and pass that string as `requestJson`. Do not pass canonical fields such as `content`, `schedule`, or `socialAccounts` directly to this tool.",
"inputSchema": {
"type": "object",
"required": [
"requestJson"
],
"properties": {
"requestJson": {
"type": "string",
"description": "JSON-encoded object conforming to the canonical input schema returned by schema_describe."
}
},
"additionalProperties": false
},
"annotations": {
"title": "Validate post",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description78/100
Creates a project in the API key's organization.
Use projects to isolate social accounts, media, and posts for a
specific user, client, or brand in your application.
The description explains the capability, when to use it, and what to expect.
Inputs86/100
Input documentation gives an agent enough context to populate the arguments.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "projects_list",
"title": "List projects",
"description": "Returns projects that belong to the same organization as the API key. A project corresponds to a \"Business Profile\" in the UI.",
"inputSchema": {
"type": "object"
},
"annotations": {
"title": "List projects",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description94/100
Returns the canonical input schema.
Use this before calling a tool when the expected arguments are unclear, when validation errors mention missing or invalid fields, or when a tool supports multiple modes, platforms, targets, schedules, content types, or other variants. This is especially useful for complex tools such as posts_create, where required fields and valid enum values depend on the selected target.
If jsonPointer is provided, returns only that sub-schema. If toolName is omitted, returns the available tool names and summaries.
The description explains the capability, when to use it, and what to expect.
Inputs95/100
Input documentation gives an agent enough context to populate the arguments.
jsonPointer
Optional JSON Pointer into the selected tool's input schema, for example /properties/socialAccounts/items. Use this to inspect a nested part of a large schema.
Clear enough to supply this argument.
toolName
Name of the MCP tool to describe. Omit to list describable tools.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "schema_describe",
"title": "Describe MCP tool schema",
"description": "Returns the canonical input schema.\n\nUse this before calling a tool when the expected arguments are unclear, when validation errors mention missing or invalid fields, or when a tool supports multiple modes, platforms, targets, schedules, content types, or other variants. This is especially useful for complex tools such as posts_create, where required fields and valid enum values depend on the selected target.\n\nIf jsonPointer is provided, returns only that sub-schema. If toolName is omitted, returns the available tool names and summaries.",
"inputSchema": {
"type": "object",
"properties": {
"toolName": {
"type": "string",
"description": "Name of the MCP tool to describe. Omit to list describable tools."
},
"jsonPointer": {
"type": "string",
"description": "Optional JSON Pointer into the selected tool's input schema, for example /properties/socialAccounts/items. Use this to inspect a nested part of a large schema."
}
},
"additionalProperties": false
},
"annotations": {
"title": "Describe MCP tool schema",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description79/100
Returns standalone social account posts for the API key's organization.
Each item includes the content, schedule, delivery status and latest stored analytics for a given social account target.
The description explains the capability, when to use it, and what to expect.
Inputs61/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
cursor
Opaque cursor for the next page of results.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
deliveryStatus
Filter to one or more delivery statuses. Provide a comma-separated list of delivery status values.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
limit
Number of items to return.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
platform
Filter to one or more social platforms. Provide a comma-separated list of platform values.
Explain the meaning of this value, not just its name.
postId
Filter to one or more parent posts. Provide a comma-separated list of post IDs.
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
projectId
Filter to one or more projects. Provide a comma-separated list of project IDs.
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
socialAccountId
Filter to one or more connected social accounts. Provide a comma-separated list of social account IDs.
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "social_account_posts_list",
"title": "List social account posts",
"description": "Returns standalone social account posts for the API key's organization.\n\nEach item includes the content, schedule, delivery status and latest stored analytics for a given social account target.\n",
"inputSchema": {
"type": "object",
"properties": {
"limit": {
"type": "integer",
"format": "int32",
"default": 50,
"maximum": 100,
"minimum": 1,
"description": "Number of items to return."
},
"cursor": {
"type": "string",
"description": "Opaque cursor for the next page of results."
},
"postId": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter to one or more parent posts. Provide a comma-separated list of post IDs."
},
"platform": {
"type": "array",
"items": {
"enum": [
"PINTEREST",
"LINKEDIN",
"LINKEDIN_PAGES",
"INSTAGRAM",
"FACEBOOK",
"THREADS",
"TIKTOK",
"X",
"YOUTUBE",
"BLUESKY",
"WOOPTEST"
],
"type": "string",
"description": "Identifies which social media platform this data structure targets.\n"
},
"description": "Filter to one or more social platforms. Provide a comma-separated list of platform values."
},
"projectId": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter to one or more projects. Provide a comma-separated list of project IDs."
},
"deliveryStatus": {
"type": "array",
"items": {
"enum": [
"NOT_STARTED",
"SENDING",
"PUBLISHED",
"FAILED"
],
"type": "string",
"description": "Delivery lifecycle status for a post.\n\n`NOT_STARTED`: The post exists and is scheduled, but delivery has not started yet.\n`SENDING`: Delivery is currently in progress.\n`PUBLISHED`: Delivery completed successfully.\n`FAILED`: Delivery completed unsuccessfully.\n"
},
"description": "Filter to one or more delivery statuses. Provide a comma-separated list of delivery status values."
},
"socialAccountId": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter to one or more connected social accounts. Provide a comma-separated list of social account IDs."
}
}
},
"annotations": {
"title": "List social account posts",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description92/100
Returns the organization's social account posts published in a range of
UTC days, each with its latest stored metrics. Posts are ordered by
`sortBy`, highest first, or newest first when `sortBy` is omitted.
Metrics are lifetime totals since publishing, as of
`metricsCollectedAt`. They are collected about once a day, and reading
them does not refresh them.
What `views` counts by platform:
- `INSTAGRAM`, `FACEBOOK`, `THREADS`: times the post was shown, repeats included.
- `TIKTOK`, `YOUTUBE`: video plays.
- `PINTEREST`: video views. Image Pins have none.
- `LINKEDIN_PAGES` reports `impressions` and `uniqueImpressions` instead.
The description explains the capability, when to use it, and what to expect.
Inputs66/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
cursor
Opaque cursor for the next page of results.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
endDate
Last UTC day of the publish range, inclusive. The range can span at most 366 days.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
limit
Number of items to return.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
platform
Filter to one or more social platforms. Provide a comma-separated list of platform values.
Resolve the mismatch between this description and its schema constraints.
projectId
Filter to one or more projects. Provide a comma-separated list of project IDs.
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
socialAccountId
Filter to one or more connected social accounts. Provide a comma-separated list of social account IDs.
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
sortBy
Metric to order the posts by, highest first. Posts without it come last.
Clear enough to supply this argument.
startDate
First UTC day of the publish range, inclusive.
Clear enough to supply this argument.
Annotations100/100
All four behavior hints are declared.
{
"title": "List social account post analytics",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
Output schema0/100
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "social_account_posts_list_analytics",
"title": "List social account post analytics",
"description": "Returns the organization's social account posts published in a range of\nUTC days, each with its latest stored metrics. Posts are ordered by\n`sortBy`, highest first, or newest first when `sortBy` is omitted.\n\nMetrics are lifetime totals since publishing, as of\n`metricsCollectedAt`. They are collected about once a day, and reading\nthem does not refresh them.\n\nWhat `views` counts by platform:\n- `INSTAGRAM`, `FACEBOOK`, `THREADS`: times the post was shown, repeats included.\n- `TIKTOK`, `YOUTUBE`: video plays.\n- `PINTEREST`: video views. Image Pins have none.\n- `LINKEDIN_PAGES` reports `impressions` and `uniqueImpressions` instead.\n",
"inputSchema": {
"type": "object",
"required": [
"endDate",
"startDate"
],
"properties": {
"limit": {
"type": "integer",
"format": "int32",
"default": 50,
"maximum": 100,
"minimum": 1,
"description": "Number of items to return."
},
"cursor": {
"type": "string",
"description": "Opaque cursor for the next page of results."
},
"sortBy": {
"enum": [
"views",
"impressions",
"uniqueImpressions",
"likes",
"reactions",
"comments",
"shares",
"saves",
"clicks",
"engagementRate"
],
"type": "string",
"description": "Metric to order the posts by, highest first. Posts without it come last."
},
"endDate": {
"type": "string",
"format": "date",
"description": "Last UTC day of the publish range, inclusive. The range can span at most 366 days."
},
"platform": {
"type": "array",
"items": {
"enum": [
"PINTEREST",
"LINKEDIN",
"LINKEDIN_PAGES",
"INSTAGRAM",
"FACEBOOK",
"THREADS",
"TIKTOK",
"X",
"YOUTUBE",
"BLUESKY",
"WOOPTEST"
],
"type": "string",
"description": "Identifies which social media platform this data structure targets.\n"
},
"description": "Filter to one or more social platforms. Provide a comma-separated list of platform values."
},
"projectId": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter to one or more projects. Provide a comma-separated list of project IDs."
},
"startDate": {
"type": "string",
"format": "date",
"description": "First UTC day of the publish range, inclusive."
},
"socialAccountId": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter to one or more connected social accounts. Provide a comma-separated list of social account IDs."
}
}
},
"annotations": {
"title": "List social account post analytics",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
Deletes one social account connection by ID.
This removes the associated OAuth grant, including stored access and
refresh tokens, so the account no longer counts toward the
organization's active connected-account allowance.
Describe the returned information so the agent knows whether it will answer the request.
Inputs50/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
socialAccountId
Connected social account identifier.
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
Returns account-level metrics of one social account over a range of UTC
days: its follower count and the views, engagements and other activity
across all of its content. Per-post metrics are in each social account
post's `metrics`.
Each point covers one UTC day. Metrics are collected about once a day,
so the latest day or two may be missing. Reading analytics does not
refresh them.
Metrics by platform:
- `FACEBOOK`: followers, views, engagements.
- `INSTAGRAM`: followers, views, engagements, likes, comments, shares, saves.
- `LINKEDIN_PAGES`: followers, impressions, engagements, likes, comments, shares, clicks.
- `PINTEREST`: followers, impressions, engagements, saves, clicks, views (video views).
- `YOUTUBE`: followers (subscribers), views, likes, comments, shares.
- Other platforms have no account analytics and return empty `metrics`.
The description explains the capability, when to use it, and what to expect.
Inputs67/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
endDate
Last UTC day of the range, inclusive. The range can span at most 366 days.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
socialAccountId
Connected social account identifier.
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
startDate
First UTC day of the range, inclusive.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "social_accounts_get_analytics",
"title": "Get social account analytics",
"description": "Returns account-level metrics of one social account over a range of UTC\ndays: its follower count and the views, engagements and other activity\nacross all of its content. Per-post metrics are in each social account\npost's `metrics`.\n\nEach point covers one UTC day. Metrics are collected about once a day,\nso the latest day or two may be missing. Reading analytics does not\nrefresh them.\n\nMetrics by platform:\n- `FACEBOOK`: followers, views, engagements.\n- `INSTAGRAM`: followers, views, engagements, likes, comments, shares, saves.\n- `LINKEDIN_PAGES`: followers, impressions, engagements, likes, comments, shares, clicks.\n- `PINTEREST`: followers, impressions, engagements, saves, clicks, views (video views).\n- `YOUTUBE`: followers (subscribers), views, likes, comments, shares.\n- Other platforms have no account analytics and return empty `metrics`.\n",
"inputSchema": {
"type": "object",
"required": [
"endDate",
"startDate",
"socialAccountId"
],
"properties": {
"endDate": {
"type": "string",
"format": "date",
"description": "Last UTC day of the range, inclusive. The range can span at most 366 days."
},
"startDate": {
"type": "string",
"format": "date",
"description": "First UTC day of the range, inclusive."
},
"socialAccountId": {
"type": "string",
"description": "Connected social account identifier."
}
}
},
"annotations": {
"title": "Get social account analytics",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description80/100
Returns platform-specific input options for a connected social account.
Use this endpoint to discover valid values for flattened post-target
fields such as `pinterestBoardId` and `privacyLevel`.
Describe the returned information so the agent knows whether it will answer the request.
Inputs50/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
socialAccountId
Connected social account identifier.
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description88/100
Returns social accounts that can currently be used for publishing.
When `projectId` is provided, only social accounts usable within that project are returned.
Describe the returned information so the agent knows whether it will answer the request.
Inputs50/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
projectId
Filter to resources that belong to a specific project.
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
No output schema is declared. Add one for structured results so clients can interpret returned fields.
Not declared
Original tool metadata
{
"name": "social_accounts_list",
"title": "List social accounts",
"description": "Returns social accounts that can currently be used for publishing.\n\nWhen `projectId` is provided, only social accounts usable within that project are returned.\n",
"inputSchema": {
"type": "object",
"properties": {
"projectId": {
"type": "string",
"description": "Filter to resources that belong to a specific project."
}
}
},
"annotations": {
"title": "List social accounts",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description98/100
Registers a URL to receive webhook events for the specified event types.
The response includes a `signingSecret` (base64-encoded, 32 bytes) that is
returned **once only**. Use it to verify the `X-Woop-Signature` header on
incoming webhook payloads.
**Signature format:** `t=<unix>,v1=<hmac-sha256-hex>`
**Signed payload:** `<unix>.<json-body>`
The description explains the capability, when to use it, and what to expect.
Inputs88/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
eventTypes
Webhook event types this endpoint should receive.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
WoopSocial Social Media MCP setup, tools, quality score, publishing readiness, and alternatives.
How do I add WoopSocial Social Media MCP to Claude, ChatGPT, or Cursor?
Add WoopSocial Social Media MCP to Claude, ChatGPT, or Cursor by connecting its remote MCP URL in each client's MCP settings. In Claude, add a custom connector. In ChatGPT, add an MCP app. In Cursor, add an MCP server under Settings. The MCP URL is https://api.woopsocial.com/mcp.
Is WoopSocial Social Media MCP MCP ready for ChatGPT and Claude?
As of November 11, 2026, WoopSocial Social Media MCP scores 100/100 on Manufact's MCP publishing checklist. The scan meets ChatGPT publishing checks and meets Claude publishing checks. Passing these checks does not guarantee marketplace approval.
How clear is WoopSocial Social Media MCP's MCP tool documentation?
As of November 11, 2026, WoopSocial Social Media MCP scores 76/100 in Manufact's review of tool titles, descriptions, input and output schemas, and behavior annotations. The review covers 28 of 28 discovered tools. The quality score measures documentation clarity; runtime behavior and marketplace readiness require separate checks.
What are the best alternatives to WoopSocial Social Media MCP?
As of November 12, 2026, alternatives to WoopSocial Social Media MCP in marketing-seo on the Manufact MCP leaderboard include BulkPublish, Fuxux, Refluenced, The Prompting Company MCP, and Buzzmark.
How can WoopSocial Social Media MCP improve its MCP documentation?
media_uploads_get_session is the lowest-scoring reviewed tool at 65/100. No output schema is declared. Add one for structured results so clients can interpret returned fields. Open its review for feedback and a copyable fix prompt, then rerun the documentation review after updating your tool metadata.
Not your MCP?
Review any public or OAuth MCP server for protocol compatibility, tool documentation, and ChatGPT and Claude publishing readiness. No account required.