Kinuly in Claude and ChatGPT
Connect Kinuly to your AI assistant once. Then plan, schedule and check every creator’s posts by asking in plain words, and watch them land in your Kinuly calendar.
https://kinuly.social/mcp- No API key: sign in with your Kinuly account
- You approve each assistant and what it may do
- Disconnect anytime from Settings
How it works#
Paste the server URL once, in Claude’s or ChatGPT’s connector settings.
Kinuly opens its own sign-in page and asks what the assistant may do: look only, or also make changes.
“Schedule Ava’s week.” The assistant finds her uploads, plans the posts and Kinuly publishes them on time.
Everything stays in your workspace: the same plan limits, quotas and checks apply as when you click through Kinuly yourself, and you can review or change any post in the calendar afterwards.
Connect your assistant#
Pick your assistant. Setup takes about a minute; you need a Kinuly account with a verified email.
- Open your connectorsIn Claude on the web or desktop, go to Customize → Connectors and click Add custom connector.
- Add KinulyName it Kinuly and paste
https://kinuly.social/mcp. If Claude asks how to sign in, keep Sign in now and Use Claude’s published identity. Click Add. - Sign in and allowClick Connect. On the Kinuly page, sign in, leave Allow changes ticked if Claude should schedule posts, and click Allow access.
- Use it in a chatClick + → Connectors and check that Kinuly is on. Then ask, for example: “What’s scheduled for this week?”
- Turn on developer modeIn ChatGPT on the web, open Settings → Security and login and turn on Developer mode.
- Add KinulyGo to chatgpt.com/plugins, select +, name it Kinuly, describe it (“Schedules Instagram posts for my creators”), paste
https://kinuly.social/mcpand click Create. - Sign in and allowSign in on the Kinuly page and click Allow access.
- Use it in a chatIn a new chat, click + → More and pick Kinuly.
claude mcp add --transport http kinuly https://kinuly.social/mcpThen run /mcp in Claude Code, choose kinuly and sign in in the browser window that opens.
{
"mcpServers": {
"kinuly": {
"url": "https://kinuly.social/mcp"
}
}
}Kinuly then appears in Cursor’s MCP settings; select it to sign in.
{
"servers": {
"kinuly": {
"type": "http",
"url": "https://kinuly.social/mcp"
}
}
}Start the server from the file and sign in when VS Code asks.
Any assistant or editor that supports remote MCP servers over HTTP with OAuth sign-in works: add https://kinuly.social/mcp and sign in when it asks. Kinuly reads the app’s published identity or lets it register itself, so there is no client ID or secret to set up.
What to ask#
Talk to your assistant the way you’d brief a team member. It picks the right Kinuly tools, and asks you before scheduling a lot or deleting anything.
“Schedule Ava’s Reels for next week, two a day in the evening, using the clips I uploaded yesterday.”
“Find the empty days in the next two weeks and fill them from unused uploads. Show me the plan first.”
“Did anything fail to post this week? Tell me why and reschedule what you can.”
“Move Mia’s Saturday Reel to 8 pm and add #summer to the caption.”
“Add this video to Kinuly and post it on Lena’s account tomorrow at 7 pm: https://…/clip.mp4”
“Which of Mia’s Reels did best last month, and when does she get the most views?”
Ready-made prompts
Assistants that support MCP prompts offer these shortcuts in their chat menu.
| Prompt | What it does |
|---|---|
Plan a creator’s weekplan_week | Plan and schedule next week’s posts for one creator from their unused uploads. |
Weekly reportweekly_report | Summarize the last 7 days across the roster: what went out, what failed, what performed best. |
Fill empty daysfill_gaps | Find days with nothing scheduled and propose posts from unused content. |
Tools reference#
Kinuly gives assistants 16 tools. You never call them yourself; this is what your assistant can do on your behalf, and what each one needs.
Workspace
Workspace overviewget_workspaceRead only
Summary of the Kinuly workspace: plan and whether it is active, posts used and left this month, creators connected and allowed, scheduled and failing posts, the usual time zone, and links to each page. Call this first when you need context.
Try“How many posts do we have left this month?”
No parameters.
Creators
Find creatorslist_creatorsRead only
Lists the Instagram accounts (creators) connected to the workspace, with their IDs, @usernames, connection status and post counts. Use it to turn a name like “Ava” into a creator_id. Only creators with status connected can publish.
Try“Which creators need to be reconnected?”
| Parameter | Type | Description |
|---|---|---|
search | string | Part of a name or @username. |
status | all · connected · needs_attention · disconnected | needs_attention = the account must be reconnected or is being updated. Default: "all". |
page | number 1–10000 | Page number, starting at 1. Default: 1. |
Connect a creatorget_connect_linkRead only
Instagram accounts are connected through Instagram’s own sign-in in the Kinuly app, never through chat. Returns the page where the user can connect a creator, and how many slots their plan has left.
Try“I want to add a new creator.”
No parameters.
Content
List uploadslist_mediaRead only
Lists videos and images in the content library, newest first, with how many posts already use each one. Filter with uploaded_after for “the clips I uploaded yesterday” and unused_only to find content that hasn’t been scheduled yet.
Try“What did I upload yesterday that isn’t scheduled yet?”
| Parameter | Type | Description |
|---|---|---|
type | all · video · image | Default: "all". |
unused_only | boolean | Only media that no draft or scheduled post uses. Default: false. |
uploaded_after | string | A date (2026-10-05, read in the workspace zone) or an ISO 8601 date-time. |
search | string | Part of the file name. |
page | number 1–10000 | Page number, starting at 1. Default: 1. |
limit | number 1–100 | Default: 50. |
Import media from a linkimport_mediaMakes changes
Adds a video or image to the content library from a public HTTPS link (a direct file URL, not a web page). Videos: MP4 or MOV, H.264 or HEVC, 3 s to 15 min, up to 4K. Images: JPEG, PNG or WebP. 100 MB maximum. Returns the new media ID.
Try“Add this video to Kinuly: https://cdn.example.com/clip.mp4”
| Parameter | Type | Description |
|---|---|---|
urlrequired | string | Direct HTTPS link to the file. |
name | string | File name to show in Kinuly. |
Upload filesget_upload_linkRead only
Files on the user’s device can’t travel through chat. Returns the Kinuly page where they can drag in videos and images, with the accepted formats and the storage left.
Try“I have 10 new videos on my laptop.”
No parameters.
Delete mediadelete_mediaCan’t be undone
Permanently deletes a file from the content library. Refused while a draft or scheduled post uses it. Ask the user before deleting.
Try“Delete the duplicate beach clip.”
| Parameter | Type | Description |
|---|---|---|
media_idrequired | ID | Media ID (a UUID returned by Kinuly). |
Posts
List postslist_postsRead only
Lists posts with their status, creator, time and caption. Statuses: draft, scheduled, publishing, published, needs_attention (failed or blocked: check the error), cancelled. Filter by creator and by a from/to range.
Try“Did anything fail to post this week?”
| Parameter | Type | Description |
|---|---|---|
status | all · draft · scheduled · publishing · published · needs_attention · cancelled | all excludes cancelled posts. Default: "all". |
creator_id | ID | Creator ID (a UUID returned by Kinuly). |
from | string | A date (2026-10-05, read in the workspace zone) or an ISO 8601 date-time. |
to | string | End of the range. A plain date includes that whole day. |
page | number 1–10000 | Page number, starting at 1. Default: 1. |
limit | number 1–100 | Default: 50. |
Post detailsget_postRead only
Everything about one post: full caption, media, schedule, status, error and, once published, its Instagram link and statistics.
Try“Why did Mia’s Tuesday Reel fail?”
| Parameter | Type | Description |
|---|---|---|
post_idrequired | ID | Post ID (a UUID returned by Kinuly). |
Show calendarget_calendarRead onlyCalendar view
The publishing calendar day by day: every post with its local time, creator and status. Defaults to the next 7 days for the whole roster. Use it to spot empty days before planning.
Try“Show me next week for the whole roster.”
| Parameter | Type | Description |
|---|---|---|
start_date | date | First day (YYYY-MM-DD). Defaults to today. |
days | number 1–31 | Default: 7. |
creator_id | ID | Creator ID (a UUID returned by Kinuly). |
timezone | string | IANA time zone such as Europe/Paris or America/New_York. Defaults to the workspace’s usual zone (see get_workspace). |
Create postcreate_postMakes changes
Creates one Reel, photo or carousel for a connected creator. action=draft saves it unscheduled; action=schedule publishes it automatically at scheduled_at (within 90 days); action=publish_now posts it within a minute. Each scheduled post counts toward the monthly quota.
Try“Post the gym clip on Ava’s account tomorrow at 7 pm.”
| Parameter | Type | Description |
|---|---|---|
creator_idrequired | ID | Creator ID (a UUID returned by Kinuly). |
media_idsrequired | ID list (max 10) | Media IDs from list_media or import_media, in display order. |
caption | string | Instagram caption, up to 2,200 characters, hashtags included. |
title | string | Internal name shown in Kinuly’s calendar, never published. Defaults to the start of the caption or the file name. |
kind | reel · image · carousel | reel = one video, image = one photo, carousel = 2–10 items. Inferred from the media when omitted. |
action | draft · schedule · publish_now | Defaults to schedule when scheduled_at is set, otherwise draft. |
scheduled_at | string | ISO 8601 date-time. With an offset (2026-10-05T18:30:00+02:00) it is exact; without one (2026-10-05T18:30) it is read in the given time zone. |
timezone | string | IANA time zone such as Europe/Paris or America/New_York. Defaults to the workspace’s usual zone (see get_workspace). |
Schedule postsschedule_postsMakes changesCalendar view
Schedules up to 50 posts in one go, e.g. a creator’s whole week. Each post is checked and scheduled on its own; the result says which succeeded and why any failed, so you can fix and retry only those. Confirm the plan with the user before scheduling many posts.
Try“Schedule Ava’s Reels for next week, two a day in the evening.”
| Parameter | Type | Description |
|---|---|---|
postsrequired | list of posts (max 50) | |
posts[].creator_idrequired | ID | Creator ID (a UUID returned by Kinuly). |
posts[].media_idsrequired | ID list (max 10) | Media IDs from list_media or import_media, in display order. |
posts[].caption | string | Instagram caption, up to 2,200 characters, hashtags included. |
posts[].title | string | Internal name shown in Kinuly’s calendar, never published. Defaults to the start of the caption or the file name. |
posts[].kind | reel · image · carousel | reel = one video, image = one photo, carousel = 2–10 items. Inferred from the media when omitted. |
posts[].scheduled_atrequired | string | ISO 8601 date-time. With an offset (2026-10-05T18:30:00+02:00) it is exact; without one (2026-10-05T18:30) it is read in the given time zone. |
posts[].timezone | string | IANA time zone such as Europe/Paris or America/New_York. Defaults to the workspace’s usual zone (see get_workspace). |
timezone | string | Zone for every post that doesn’t set its own. |
Edit postupdate_postMakes changes
Changes a draft, scheduled, failed or blocked post: caption, title, media, creator or time. Only the fields you pass change. action=draft unschedules it, action=schedule (re)schedules it. Posts already sent to Instagram can’t be edited.
Try“Move Saturday’s Reel to 8 pm and add #summer.”
| Parameter | Type | Description |
|---|---|---|
post_idrequired | ID | Post ID (a UUID returned by Kinuly). |
caption | string | Instagram caption, up to 2,200 characters, hashtags included. |
title | string | Internal name shown in Kinuly’s calendar, never published. Defaults to the start of the caption or the file name. |
media_ids | ID list (max 10) | Media IDs from list_media or import_media, in display order. |
creator_id | ID | Creator ID (a UUID returned by Kinuly). |
kind | reel · image · carousel | reel = one video, image = one photo, carousel = 2–10 items. Inferred from the media when omitted. |
scheduled_at | string | ISO 8601 date-time. With an offset (2026-10-05T18:30:00+02:00) it is exact; without one (2026-10-05T18:30) it is read in the given time zone. |
timezone | string | IANA time zone such as Europe/Paris or America/New_York. Defaults to the workspace’s usual zone (see get_workspace). |
action | keep · draft · schedule | keep leaves a scheduled post scheduled and a draft a draft. Default: "keep". |
Cancel postcancel_postCan’t be undone
Cancels a draft or scheduled post so it never publishes, and gives its quota back. Posts already sent to Instagram can’t be cancelled. Ask the user first.
Try“Cancel everything scheduled for Lena on Friday.”
| Parameter | Type | Description |
|---|---|---|
post_idrequired | ID | Post ID (a UUID returned by Kinuly). |
Insights
Post statisticsget_insightsRead only
Statistics Instagram reports for published posts (views, likes, comments and more), newest first, optionally for one creator. Figures refresh automatically; missing values mean Instagram hasn’t reported them yet, not zero.
Try“Which of Mia’s Reels did best last week?”
| Parameter | Type | Description |
|---|---|---|
creator_id | ID | Creator ID (a UUID returned by Kinuly). |
page | number 1–10000 | Page number, starting at 1. Default: 1. |
Best posting timesget_best_timesRead only
Ranks hours of the day and days of the week by average performance of past posts (views when available), for one creator or the roster. Needs several published posts with statistics; says so when there isn’t enough data instead of guessing.
Try“When should Ava post to get the most views?”
| Parameter | Type | Description |
|---|---|---|
creator_id | ID | Creator ID (a UUID returned by Kinuly). |
timezone | string | IANA time zone such as Europe/Paris or America/New_York. Defaults to the workspace’s usual zone (see get_workspace). |
Permissions & security#
With your approval, assistants can
- See your creators, posts, uploads, calendar and statistics
- Upload content, create, schedule, edit and cancel posts (only if you tick Allow changes)
Assistants can never
- See your password or sign in as you elsewhere
- Pay, change your plan or touch billing
- Connect or remove Instagram accounts
- Change your security settings or reach another workspace
- You sign in on Kinuly, not in the chat. The connection uses OAuth 2.1 with PKCE: the assistant receives a temporary access key tied to your approval, never your password.
- Access keys are short-lived. They expire after an hour and renew automatically. Each renewal replaces the previous key, and reusing an old one disconnects the assistant.
- You stay in control. See and disconnect assistants in Settings → Connected apps. Resetting your password disconnects every assistant at once.
- The same rules as the app. Plan limits, the monthly quota, account checks and the activity log apply to everything an assistant does.
Teams
On a paid plan, a workspace can have up to five people: the owner plus four invited members. When someone on a team connects an assistant, Kinuly asks which workspace it should work in, and the assistant can only do what that person’s role allows there.
| Role | What their assistant can do |
|---|---|
| Owner | Everything in the tools reference: upload content, plan, schedule, edit and cancel posts. |
| Manager | Everything in the tools reference: upload content, plan, schedule, edit and cancel posts. |
| Assistant | Everything in the tools reference: upload content, plan, schedule, edit and cancel posts. The usual role for VAs. |
| Viewer | Look only: calendar, posts, creators and statistics. Changes are refused. |
Limits#
| Posts per month | Your plan’s quota, shared with the web app: Free 20 · Starter 500 · Growth 2,000 · Pro 10,000 · Agency 20,000 · Scale 40,000 |
|---|---|
| Scheduling window | Up to 90 days ahead |
| Posts per request | Up to 50 at once with Schedule posts |
| Videos | MP4 or MOV, H.264 or HEVC, 3 seconds to 15 minutes, up to 4K, 100 MB |
| Images | JPEG, PNG or WebP, 100 MB |
| Storage | 2 GB per workspace |
| Requests | 240 per minute for each connected assistant |
Troubleshooting#
Kinuly doesn’t show up in my chat
The sign-in page says the link isn’t valid
https://kinuly.social/mcp, ending in /mcp.Kinuly asks me to finish setting up my account
The assistant says the connection is read-only
A post shows “needs attention”
Times are a few hours off
The assistant says there are too many requests
For developers#
Kinuly is a standard remote MCP server, so any compliant client works without special setup.
| Transport | Streamable HTTP at https://kinuly.social/mcp, stateless, JSON responses. Protocol 2026-07-28 (per-request metadata, server/discover), plus 2025-11-25, 2025-06-18 and 2025-03-26 through initialize. |
|---|---|
| Authorization | OAuth 2.1 authorization code with PKCE (S256), resource indicators, rotating refresh tokens, iss in authorization responses. Scopes read and write. |
| Clients | Client ID Metadata Documents, or dynamic client registration (public or confidential clients). |
| Metadata | https://kinuly.social/.well-known/oauth-protected-resource/mcphttps://kinuly.social/.well-known/oauth-authorization-server |
| Endpoints | /oauth/authorize · /oauth/token · /oauth/register · /oauth/revoke |
| Interactive UI | get_calendar and schedule_posts render ui://kinuly/calendar.html (MCP Apps, text/html;profile=mcp-app). Every result also carries text and structuredContent. |
| Tool hints | Every tool declares title, readOnlyHint, destructiveHint, idempotentHint and openWorldHint. |
Start free, connect a creator, then add Kinuly to your assistant.