Scoped agent access

Distributor MCP

Prepare content. Read what worked. Schedule within your limits.

Connect your agent to Distributor using a revocable bearer token.

Your endpoint

https://mcp.distributoor.com/mcp

What agents can do

  • Draft X posts, threads and Articles, social posts and carousels.
  • Upload images and PDFs; read Insights and the posting schedule.
  • Queue your own drafts into approved slots with schedule:posts, within owner-set guardrails.
  • Read Engage rounds, feeds and CRM touches.
  • Read and save swipe posts, work with angles and report bugs.

Each action requires its scope. The tool list below reflects this deployment.

Owner stays in control

  • Agents cannot publish instantly or send Engage replies.
  • Agents cannot connect accounts or change your limits.
  • You review drafts, enable scheduling and set spend caps in the app.

Get a token

Settings → Agent access (owner login required).

Open Agent access ↗

Start with the smallest set of scopes for your task:

Drafting
read + drafts:write. Add media:write for uploads and bugs:write for reports.
Scheduling
read + schedule:posts for own drafts when enabled; add drafts:write to create them. schedule:write only edits weekly times.
Engage
read for stored results, enabled rounds and touches. Add engage:draft for reply drafts; engage:run opts into bounded sessions that can spend.

Connect your client

Use your local secret manager or a private shell prompt to set DISTRIBUTOR_TOKEN. Keep client configs out of source control.

Claude Code

Set DISTRIBUTOR_TOKEN locally first. This command stores the expanded token in your local client config; keep it private.

claude mcp add --transport http distributor https://mcp.distributoor.com/mcp \
  --header "Authorization: Bearer $DISTRIBUTOR_TOKEN"
Official setup docs ↗

Codex

Add to ~/.codex/config.toml, then start Codex with DISTRIBUTOR_TOKEN in its environment.

[mcp_servers.distributor]
url = "https://mcp.distributoor.com/mcp"
bearer_token_env_var = "DISTRIBUTOR_TOKEN"
Official setup docs ↗

Cursor

Add to ~/.cursor/mcp.json. Launch Cursor with DISTRIBUTOR_TOKEN in its environment.

{
  "mcpServers": {
    "distributor": {
      "url": "https://mcp.distributoor.com/mcp",
      "headers": {
        "Authorization": "Bearer ${env:DISTRIBUTOR_TOKEN}"
      }
    }
  }
}
Official setup docs ↗

Check tools with curl

Streamable HTTP. A valid token is required, including for tools/list.

curl --fail-with-body https://mcp.distributoor.com/mcp \
  -H "Authorization: Bearer $DISTRIBUTOR_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "MCP-Protocol-Version: 2025-11-25" \
  --data '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' 

Available tools

Generated from the live registry. Write tools can save drafts or start bounded work; check the description and scope before calling.

ToolPurposeRequired scopeAccess
get_guideConcise Markdown: formats and limits, building articles/carousels/threads, media upload, costs, reading, bug reports.Any valid tokenRead
list_notificationsRead workspace publication and recovery notifications.readRead
list_formatsFormats, limits, JSON schemas, examples, media rules, scopes and X costs.readRead
create_draftCreate a draft for Mark to review in Compose.drafts:writeWrite
update_draftEdit your unopened draft, or a Mark-owned draft when drafts:edit_mark is enabled.drafts:writeWrite
list_draftsYour drafts, newest first, with status and slot.readRead
get_draftOne of your drafts: status (draft, proposed, scheduled, posted, failed, rejected, expired, discarded), revision, slot, result, Mark's reject note and the change log.readRead
discard_draftHide one of your drafts from Mark (soft delete).drafts:writeWrite
upload_mediaUpload a JPEG/PNG/GIF image or a PDF (linkedin_carousel only) as base64, at most 10 MB.media:writeWrite
list_accountsConnected destinations (no secrets): platform, name, status, capabilities.readRead
list_historyPublication jobs with status and result links, newest first.readRead
get_jobStatus of one publication job (from list_history or list_calendar).readRead
list_calendarScheduled, sending and posted items in [start, end) epoch ms (default 30 days back to 90 ahead; max 366 days; truncated flag over 500).readRead
list_insightsImported posts for one account ranked by a metric.readRead
list_swipeSaved swipe posts; private snippets, links, images and notes require swipe:read_private as well as read.readRead
save_swipeAdd or update an imported post in the shared swipe file.swipe:writeWrite
remove_swipeRemove an imported post from the swipe file.swipe:writeWrite
report_bugTell Mark what went wrong.bugs:writeWrite
list_bugsYour reports with status (open, in_progress, fixed, wont_fix) and Mark's note.bugs:writeRead
list_anglesFilter shared angles.angles:readRead
get_angleFull title, context Markdown, source, links and authenticated media URLs (send the same bearer token to fetch).angles:readRead
create_angleCreate an idea in the shared workspace.angles:writeWrite
update_angleEdit an angle with optimistic revision checking.angles:writeWrite
add_angle_noteAppend an audit/build note.angles:writeWrite
list_plug_templatesList your saved plugs.read or plugs:writeRead
get_plug_templateGet your plug template.read or plugs:writeRead
create_plug_templateSave a plug; never arm or publish it.plugs:writeWrite
update_plug_templateUpdate your template; existing proposals keep their snapshot.plugs:writeWrite
delete_plug_templateDelete your template.plugs:writeWrite
propose_plugPropose an owned X draft/job/post plug.plugs:writeWrite
list_carousel_templatesList your templates, installed fonts, colour tokens and layouts.read or templates:writeRead
get_carousel_templateGet your saved carousel template.read or templates:writeRead
create_carousel_templateSave layout, installed font, named colour tokens, cover, footer and sample.templates:writeWrite
update_carousel_templateUpdate your template; retained draft images do not change.templates:writeWrite
duplicate_carousel_templateSave a copy of your carousel template.templates:writeWrite
render_carousel_previewRender 2–10 offline slide PNG previews, returned as base64.read or templates:writeRead
free_slotsFree posting times for one account over [start, end) epoch ms (default now → 7 days; max 14 days), after Mark's gap, per-day cap and posting-window rules, existing scheduled posts and other agents' live holds.readRead
propose_slotHold a free slot (from free_slots) for your draft so Mark can approve it.drafts:writeWrite
release_slotGive up the slot your proposed draft holds; the draft returns to draft.drafts:writeWrite
get_scheduleRead the account weekly wall-clock posting slots and timezone.readRead
suggest_slotsRead stored imported-post performance by weekday/hour: sample sizes, medians, post ids and sample-support confidence.readRead
add_schedule_slotEdit one weekly posting time.schedule:writeWrite
remove_schedule_slotEdit one weekly posting time.schedule:writeWrite
get_what_workedCompare equal publication windows from stored own posts only.readRead
remix_briefReturn literal stored source structure and a checklist.read or drafts:writeWrite
propose_nudgePropose a likes/views reminder for an owned posted X post.read or plugs:writeWrite
list_nudgesYour proposed/armed/fired nudges, with frozen reply, metric, coverage and monthly spend.read or plugs:writeRead
list_trendsRead cached niche posts with coverage, author-baseline sample size and spend receipts.readRead
engage_estimateLocal preview for a preset/audience.readRead
engage_start_sessionRequires opt-in engage:run and a confirmed unchanged estimate_id.engage:runWrite
engage_resultsStored sampled session posts and signals; no paid reads.readRead
engage_draft_replyStores supplied reply text; preserves Mark’s engaged, skipped and snoozed decisions.engage:draftWrite
attach_leadAttach one Mark-picked person to a local lead state with provenance.people:writeWrite
get_leadRead local lead state and provenance.readRead
list_mentionsStored mentions/replies grouped by person for one account.readRead
draft_mention_replySave supplied draft text only.engage:draftWrite
get_daily_seriesDaily series and both heatmap sources shown in Insights, with gaps and source labels.readRead
get_insights_summaryKPIs and previous-period changes for any platform and date range.readRead
list_postsAll imported posts in the chosen range, filtered and sorted ascending or descending, with pagination.readRead
schedule_draftQueue one of your own unopened drafts into Mark's weekly slots (slot=next_slot), an open best-times test slot (slot=test_slot) or an exact at (epoch ms) that is one of those.schedule:postsWrite
get_agent_scheduleGuardrails Mark set, 7-day agent usage, weekly spend headroom and the posts you scheduled.readRead
get_time_testThe running/last test for an account: windows (Eastern), open slots, labelled posts, per-window medians with n (no winner below 5 measured posts per window) and the 365-day daily weekday prior (no time of day).read + spend:readRead
get_spendWhat Distributor spent: this week/month/all time in Mark's timezone, daily bars, cost per 1,000 impressions and the ledger (newest first).read + spend:readRead
get_personRead a local person, safe avatar and active touch timeline.readRead
list_recent_touchesRead local people ordered by their latest active touch across channels and lists.readRead
list_roundsRead stored open and past named rounds.readRead
get_round_feedRead and sort stored round posts and touch summaries.readRead
list_touchesRead chronological CRM touches by round, list or person.readRead
list_listsRead named local lists, total people and X sources.readRead
get_listRead local people in a named list.readRead
create_listCreate an empty named list.people:writeWrite
add_to_listAdd local person IDs or pasted X profiles to an existing list.people:writeWrite
remove_from_listRemove a list tag from local person IDs.people:writeWrite
get_session_feedRead stored session posts; no paid reads or reply generation.readRead

Keep access private

  • Your token is shown once. Store it privately and revoke it anytime in Settings.
  • Every MCP call is logged in Admin → Agent activity.
  • Keep tokens out of screenshots, shared configs and chat transcripts.