MCP
Tools Reference
Complete reference for all Nitty Music Social MCP tools
integrationList
List all connected social media accounts (channels) for your organization.
Parameters:
| Field | Type | Required | Description |
|---|---|---|---|
group |
string | No | Group (customer) ID from groupList. When provided, only channels belonging to that group are returned |
Returns:
| Field | Type | Description |
|---|---|---|
id |
string | Integration ID (use this when scheduling posts) |
name |
string | Display name of the account |
picture |
string | Profile picture URL |
platform |
string | Platform identifier (e.g., x, linkedin, facebook) |
customer |
object | The group (customer) this channel belongs to, as { id, name }, omitted if the channel is not assigned to a group |
groupList
List all groups (customers) for your organization. Use a group’s id with integrationList to filter channels down to a single group.
Parameters: None
Returns:
| Field | Type | Description |
|---|---|---|
id |
string | Group (customer) ID (pass to integrationList as group) |
name |
string | Group (customer) display name |
integrationSchema
Get the posting rules, character limits, required settings, and available helper tools for a specific platform. Call this before scheduling a post to understand what the platform expects.
Parameters:
| Field | Type | Required | Description |
|---|---|---|---|
isPremium |
boolean | Yes | Whether the user has a premium subscription |
platform |
string | Yes | Platform identifier (e.g., x, linkedin, reddit, discord) |
Returns:
| Field | Type | Description |
|---|---|---|
rules |
string | Platform-specific posting rules and best practices |
maxLength |
number | Maximum character length for posts |
settings |
object | JSON schema of required settings for this platform |
tools |
array | Platform-specific helper tools (see triggerTool) |
The tools array contains helper functions specific to the platform. For example, Discord returns a tool to list available channels, Reddit returns a tool to search for subreddits, and LinkedIn Page returns a tool to list pages.
Each tool in the array has:
| Field | Type | Description |
|---|---|---|
methodName |
string | Function name to pass to triggerTool |
description |
string | What the tool does |
dataSchema |
array | Parameters the tool accepts |
triggerTool
Execute a platform-specific helper function. These are discovered through integrationSchema and are used to fetch dynamic data like channel lists, subreddit suggestions, or page IDs.
Parameters:
| Field | Type | Required | Description |
|---|---|---|---|
integrationId |
string | Yes | The integration ID from integrationList |
methodName |
string | Yes | The function name from integrationSchema tools |
dataSchema |
array | Yes | Key-value pairs of parameters for the function |
Each item in dataSchema:
| Field | Type | Description |
|---|---|---|
key |
string | Parameter name |
value |
string | Parameter value |
Example use cases:
- Get the list of Discord channels for a server
- Search for Reddit subreddits
- List LinkedIn pages you manage
- Get Facebook page options
- Search Instagram audio (
audioSearch) to attach to a Reel, only on Facebook Business-linked Instagram channels
schedulePostTool
Schedule, draft, or immediately publish posts to social media platforms. This is the main tool for creating content.
Parameters:
| Field | Type | Required | Description |
|---|---|---|---|
socialPost |
array | Yes | Array of posts to create |
Each item in socialPost:
| Field | Type | Required | Description |
|---|---|---|---|
integrationId |
string | Yes | Integration ID from integrationList |
isPremium |
boolean | Yes | Whether the user has premium |
date |
string | Yes | UTC datetime (e.g., 2025-01-15T10:00:00.000Z) |
shortLink |
boolean | Yes | Whether to shorten links in the post |
type |
string | Yes | draft, schedule, or now |
postsAndComments |
array | Yes | The post content and optional comments |
settings |
array | Yes | Platform-specific settings from integrationSchema |
Each item in postsAndComments:
| Field | Type | Description |
|---|---|---|
content |
string | HTML content (see formatting rules below) |
attachments |
array | Array of image/media URLs |
Each item in settings:
| Field | Type | Description |
|---|---|---|
key |
string | Setting name |
value |
any | Setting value (prefer IDs over labels when available) |
Content Formatting
Content must be HTML with these allowed tags only:
| Tag | Usage |
|---|---|
<p> |
Wrap each line |
<h1>, <h2>, <h3> |
Headings |
<strong> |
Bold text |
<u> |
Underlined text |
<ul>, <li> |
Lists |
Posts vs Comments
The postsAndComments array behavior depends on the platform:
- Thread-based platforms (X, Threads, Bluesky): Each array item becomes a separate post in a thread
- Comment-based platforms (LinkedIn, Facebook): First item is the post, remaining items are comments
Multiple Posts
To schedule multiple posts (e.g., 20 posts across different days), add multiple items to the socialPost array, each with its own date and integrationId.
Returns:
| Field | Type | Description |
|---|---|---|
postId |
string | The created post ID |
integration |
string | The integration it was posted to |
If validation fails, returns { errors: string } with details about what went wrong (e.g., content exceeds character limit).
postsListTool
List the organization’s posts scheduled between two dates. It returns the same posts as the List Posts API endpoint, but with the channel details flattened into integrationId, platform, and integrationName fields instead of the API’s nested integration object. Each item includes the post’s current provider settings.
Parameters:
| Field | Type | Required | Description |
|---|---|---|---|
startDate |
string | Yes | UTC ISO datetime for the start of the range (e.g. 2026-07-20T00:00:00Z) |
endDate |
string | Yes | UTC ISO datetime for the end of the range (e.g. 2026-07-27T00:00:00Z) |
customer |
string | No | Group (customer) ID from groupList to filter channels down to a single group |
Returns:
An object with a posts array. Each item has:
| Field | Type | Description |
|---|---|---|
id |
string | Post ID |
publishDate |
string | UTC datetime the post is scheduled for |
state |
string | Post state (QUEUE, DRAFT, PUBLISHED, or ERROR) |
content |
string | The post content |
settings |
object | The post’s current provider-specific settings |
group |
string | The post group ID (shared across a post and its per-channel variations) |
integrationId |
string | ID of the channel the post is scheduled to |
platform |
string | Platform identifier (e.g., x, linkedin, facebook) |
integrationName |
string | Display name of the channel |
postSettingsTool
Update only the provider settings of a not-yet-published post (scheduled or draft). Merges the given keys into the post’s existing settings. Content and publish date are unchanged.
Parameters:
| Field | Type | Required | Description |
|---|---|---|---|
id |
string | Yes | The post ID |
settings |
array | Yes | The settings keys to change (only those are updated). Get valid keys from integrationSchema |
Each item in settings:
| Field | Type | Description |
|---|---|---|
key |
string | Setting name |
value |
any | Setting value (prefer IDs over labels when available) |
Returns:
| Field | Type | Description |
|---|---|---|
postId |
string | The updated post ID |
publishDate |
string | The post’s publish date (unchanged) |
If the update fails, returns { errors: string } with details (e.g., post not found, already published, a comment id was passed instead of the root post, or the merged settings failed validation).
generateImageTool
Generate an AI image to use as a post attachment.
Parameters:
| Field | Type | Required | Description |
|---|---|---|---|
prompt |
string | Yes | Description of the image to generate |
Returns:
| Field | Type | Description |
|---|---|---|
id |
string | Media ID |
path |
string | URL of the generated image |
Use the returned path in the attachments array when scheduling a post.
generateVideoOptions
List all available video generation types and their required parameters.
Parameters: None
Returns: An array of video generators, each with:
| Field | Type | Description |
|---|---|---|
type |
string | Video type identifier (e.g., image-text-slides, veo3) |
output |
string | Supported orientations: vertical|horizontal |
tools |
array | Helper functions (call with videoFunctionTool) |
customParams |
object | JSON schema of required parameters |
Available Video Types
| Type | Description | Requirements |
|---|---|---|
| Image Text Slides | Slide-based videos with text-to-speech | prompt, voice (get voice ID via videoFunctionTool) |
| Veo3 | AI-generated video with audio | prompt, optional images (max 3) |
videoFunctionTool
Execute helper functions for video generators. Use this to fetch required data before generating a video (e.g., listing available voices).
Parameters:
| Field | Type | Required | Description |
|---|---|---|---|
identifier |
string | Yes | Video type identifier from generateVideoOptions |
functionName |
string | Yes | Function name from the video type’s tools array |
Example: Call with identifier: "image-text-slides" and functionName: "loadVoices" to get available ElevenLabs voice IDs.
generateVideoTool
Generate a video to use as a post attachment.
Parameters:
| Field | Type | Required | Description |
|---|---|---|---|
identifier |
string | Yes | Video type from generateVideoOptions |
output |
string | Yes | vertical or horizontal |
customParams |
array | Yes | Key-value pairs of parameters for the video type |
Each item in customParams:
| Field | Type | Description |
|---|---|---|
key |
string | Parameter name |
value |
any | Parameter value |
Returns:
| Field | Type | Description |
|---|---|---|
url |
string | URL of the generated video |
Use the returned url in the attachments array when scheduling a post.
clippingTool
Turn a long YouTube video into short vertical clips with burned-in captions. The best parts of the video are picked automatically, every clip is saved to the media library, and when channels are passed a draft post is created for every clip on every channel. Nothing is scheduled or published. See Video clipping for what the feature does and its limits.
Clipping takes several minutes, so this tool only starts it and returns a clippingId. Follow it with clippingStatusTool.
Parameters:
| Field | Type | Required | Description |
|---|---|---|---|
url |
string | Yes | URL of the YouTube video (youtube.com or youtu.be) |
integrations |
array | No | IDs of the channels to create draft posts for, from integrationList, 20 at most. Without any, the clips only land in the media library |
clips |
number | No | Maximum number of clips, from 1 to 10. Defaults to 5 |
fit |
string | No | blur (default) keeps the whole picture over a blurred copy of itself. crop fills the clip with the middle of the picture and cuts the sides away, with no face tracking |
Returns:
| Field | Type | Description |
|---|---|---|
clippingId |
string | ID of the clipping (pass to clippingStatusTool) |
error |
string | Why the clipping could not start. No clipping minutes are used when this is set |
On hosted upstream service a clipping uses one clipping minute for every minute of the source video. An organization runs one clipping at a time and can start 20 a day.
Clients that support MCP Apps render a widget for this tool that shows the progress and the finished clips, and reports back to the conversation when the clips are ready. It reads the status through clippingWidgetTicketTool, a tool meant for the widget only: agents should not call it.
clippingStatusTool
Check the status of a clipping started with clippingTool.
While the clipping is running, the call waits up to 25 seconds for something to change before it answers, so there is no need to wait between two calls. When the status is still pending, call it again.
Parameters:
| Field | Type | Required | Description |
|---|---|---|---|
clippingId |
string | Yes | The clippingId returned by clippingTool |
Returns:
| Field | Type | Description |
|---|---|---|
status |
string | pending, completed or failed |
step |
string | The exact step: analysing, transcribing, picking, rendering, completed or failed |
title |
string | Title of the source video, once it is known |
clips |
array | The clips picked so far |
error |
string | The reason a clipping failed, or what went wrong after the clips were made |
Each item in clips:
| Field | Type | Description |
|---|---|---|
id |
string | Clip ID |
title |
string | Title written for the clip |
content |
string | Post text written for the clip |
status |
string | pending, completed or failed |
url |
string | Hosted URL of the rendered clip, once completed. Use it in the attachments array when scheduling a post |
thumbnail |
string | URL of the clip’s thumbnail |
error |
string | Why this clip failed |
A completed clipping can still carry failed clips, so check the status of each one. When the status is failed no clip was made and the clipping minutes were given back.