MCP
Examples
Common workflows when using Nitty Music Social through MCP
These examples show the tool calls an AI agent makes behind the scenes. You don’t need to write these yourself, just describe what you want in natural language and your AI agent handles the rest.
Schedule a Post to X
A typical flow to schedule a post to X (Twitter):
List integrations
The agent calls integrationList and finds your X account:
Get platform schema
The agent calls integrationSchema with platform: "x" to learn the rules:
Schedule the post
The agent calls schedulePostTool:
Post to Discord with Channel Selection
Platforms like Discord require selecting a channel first:
Get the schema
The agent calls integrationSchema with platform: "discord" and discovers a tool to list channels.
List channels
The agent calls triggerTool:
Returns available channels with their IDs.
Schedule the post
The agent includes the channel ID in settings:
Schedule an Instagram Reel with Trending Audio
Instagram (Facebook Business-linked) exposes an audioSearch tool for finding
music or original sounds to attach to a Reel:
Search for audio
The agent calls triggerTool (an empty q returns trending audio):
Returns audio assets with their IDs:
Schedule the Reel
The agent includes the chosen audio in settings. The post must be a single
video with post_type: "post":
Audio is not available on instagram-standalone channels. The Instagram Audio
API requires Facebook Login.
Post with an AI-Generated Image
Generate the image
The agent calls generateImageTool:
Returns:
Schedule with the image
The agent includes the image URL in attachments:
Generate a Video and Post
Check video options
The agent calls generateVideoOptions to see available generators.
Get voice options
For Image Text Slides, the agent calls videoFunctionTool:
Returns a list of available voices with their IDs.
Generate the video
The agent calls generateVideoTool:
Returns the video URL.
Schedule with the video
The agent uses the video URL as an attachment when calling schedulePostTool.
Clip a YouTube Video into Draft Posts
Video clipping runs for several minutes, so it is a start call followed by status calls:
List integrations
The agent calls integrationList to get the IDs of the channels the drafts are for.
Start the clipping
The agent calls clippingTool:
Returns right away:
Check the status
The agent calls clippingStatusTool with the clippingId. Each call waits up to 25 seconds for a change, and the agent repeats it while the status is pending:
Read the clips
When the status is completed, every finished clip has a hosted url:
The clips are already in the media library, and a draft per clip was created on each of the two channels. To publish one somewhere else, the agent passes its url in attachments when calling schedulePostTool.
Create an X Thread
To create a thread on X, add multiple items to postsAndComments:
{
"socialPost": [
{
"integrationId": "x-123",
"isPremium": false,
"date": "2025-01-15T10:00:00.000Z",
"shortLink": false,
"type": "schedule",
"postsAndComments": [
{
"content": "<p>Thread: 5 things I learned this week</p>",
"attachments": []
},
{
"content": "<p>1. Consistency beats intensity</p>",
"attachments": []
},
{
"content": "<p>2. Start before you're ready</p>",
"attachments": []
}
],
"settings": [
{ "key": "who_can_reply_post", "value": "everyone" }
]
}
]
}
Post to LinkedIn with a Comment
For LinkedIn, the first item in postsAndComments is the post and the rest are comments:
{
"socialPost": [
{
"integrationId": "linkedin-123",
"isPremium": false,
"date": "2025-01-15T10:00:00.000Z",
"shortLink": false,
"type": "schedule",
"postsAndComments": [
{
"content": "<p>We just launched something big!</p>",
"attachments": []
},
{
"content": "<p>Check it out at example.com</p>",
"attachments": []
}
],
"settings": []
}
]
}
Bulk Schedule
Schedule 5 posts across different days:
{
"socialPost": [
{
"integrationId": "x-123",
"isPremium": false,
"date": "2025-01-13T10:00:00.000Z",
"shortLink": false,
"type": "schedule",
"postsAndComments": [{ "content": "<p>Monday motivation</p>", "attachments": [] }],
"settings": [{ "key": "who_can_reply_post", "value": "everyone" }]
},
{
"integrationId": "x-123",
"isPremium": false,
"date": "2025-01-14T10:00:00.000Z",
"shortLink": false,
"type": "schedule",
"postsAndComments": [{ "content": "<p>Tuesday tip</p>", "attachments": [] }],
"settings": [{ "key": "who_can_reply_post", "value": "everyone" }]
},
{
"integrationId": "x-123",
"isPremium": false,
"date": "2025-01-15T10:00:00.000Z",
"shortLink": false,
"type": "schedule",
"postsAndComments": [{ "content": "<p>Midweek thoughts</p>", "attachments": [] }],
"settings": [{ "key": "who_can_reply_post", "value": "everyone" }]
},
{
"integrationId": "x-123",
"isPremium": false,
"date": "2025-01-16T10:00:00.000Z",
"shortLink": false,
"type": "schedule",
"postsAndComments": [{ "content": "<p>Thursday throwback</p>", "attachments": [] }],
"settings": [{ "key": "who_can_reply_post", "value": "everyone" }]
},
{
"integrationId": "x-123",
"isPremium": false,
"date": "2025-01-17T10:00:00.000Z",
"shortLink": false,
"type": "schedule",
"postsAndComments": [{ "content": "<p>Friday wrap-up</p>", "attachments": [] }],
"settings": [{ "key": "who_can_reply_post", "value": "everyone" }]
}
]
}
Each item in the socialPost array is an independent post with its own date, content, and settings.