Skip to main content

Iris

io.github.JCLVSH/irisVersion 0.25.3

Run multi-channel outreach: campaigns, contacts, conversations, and AI-drafted messages.

Status

Responds238 msAnswered our handshake without sign-in.

Registry data may be out of date

We could not refresh it, so this page shows the last copy.
Last checked
Nov 14, 2026, 14:38 UTC
Latency
238 ms
Remotes responding
1 of 1
Sign-in
API key
Hosting
Hosted outside the EU (detected)
Registry data as of
Nov 14, 2026, 21:12 UTC

Data from the official MCP Registry, checked by run.zero. How we check

Connect

Streamable HTTP
https://api.iris-ai.dev/mcpResponds238 ms
No sign-in

Claude Code

claude mcp add --transport http iris https://api.iris-ai.dev/mcp --header 'Authorization: Bearer <YOUR_TOKEN>'

Replace <YOUR_TOKEN> before running.

Claude Desktop and claude.ai

Settings > Connectors > Add custom connector
Name: iris
Remote MCP server URL: https://api.iris-ai.dev/mcp
This server expects the header Authorization.

Cursor

{
  "mcpServers": {
    "iris": {
      "url": "https://api.iris-ai.dev/mcp",
      "headers": {
        "Authorization": "Bearer <YOUR_TOKEN>"
      }
    }
  }
}

Replace <YOUR_TOKEN> before running.

VS Code

code --add-mcp '{"name":"iris","type":"http","url":"https://api.iris-ai.dev/mcp","headers":{"Authorization":"Bearer <YOUR_TOKEN>"}}'

Replace <YOUR_TOKEN> before running.

Streamable HTTP
npm: @jclvsh/iris 0.25.3
Package only

npm (npx)

claude mcp add iris -e 'IRIS_API_KEY=<YOUR_IRIS_API_KEY>' -- npx -y @jclvsh/iris@0.25.3

Replace <YOUR_IRIS_API_KEY> before running.

Built your own server? run.zero hosts MCP servers on European infrastructure.

Host your own MCP server on run.zero

Tools

81 tools

Tools of Iris
Read-only
Idempotent
Open world
add_campaign_contactsadd contacts to a campaign, by id or by creating them inline. a campaign needs at least one contact before it can be activated. requires write scope.NoNoNot declaredNot declared
analyze_campaignqueue AI analysis of a campaign to generate its target profiles: from the product for product_promotion campaigns, from goal_description for any other campaign. runs asynchronously; poll get_campaign until analysis_status is completed, then search_campaign_contacts. requires write scope.NoNoNot declaredNot declared
analyze_responseanalyze an inbound message using AI to determine sentiment, intent, and suggested actions. requires generate scope.NoNoNot declaredNot declared
approve_messageapprove a pending message for sending. requires send scope.YesNoNot declaredNot declared
attach_audience_to_campaigncopy a library audience into a campaign. the response is the campaign's own copy (a target profile) - editing it never touches the library master. if the campaign already has a same-named profile, the existing copy is returned. requires write scope.NoNoNot declaredNot declared
bulk_import_contactsimport multiple contacts at once, optionally adding them to a campaign. requires write scope.NoNoNot declaredNot declared
bulk_message_actionapprove or reject multiple messages at once. requires send scope.YesNoNot declaredNot declared
check_channel_availabilitycheck which outreach channels are available and configured. requires read scope.NoYesNot declaredNot declared
configure_autopilotcreate or update the autopilot config (merge: only the fields you send change; first call creates the config with defaults). autopilot is review-only - drafts wait in the approval queue, nothing sends without approval. requires write scope.NoNoNot declaredNot declared
configure_respondercreate or update the responder config (merge: only the fields you send change; the first call creates the config). with auto_reply on, replies are sent without review. Instagram only allows a reply within 24 hours of the person's last message, and only to someone who wrote first. requires write scope.YesNoNot declaredNot declared
create_audiencecreate a library audience profile manually. names are unique per library (case-insensitive). requires write scope.NoNoNot declaredNot declared
create_campaigncreate a new outreach campaign. requires write scope.NoNoNot declaredNot declared
create_contactcreate a new contact. requires write scope.NoNoNot declaredNot declared
create_conversationfind-or-create a conversation for a contact - the hub conversation by default, or the campaign-scoped thread when campaign_id is passed (contact must be in that campaign). requires write scope.NoNoNot declaredNot declared
create_conversation_messagecreate a message in a conversation. status pending_approval places it in the human review queue instead of sending. requires write scope.YesNoNot declaredNot declared
create_responder_comment_triggercreate a comment trigger. when someone comments the keyword on the account's instagram post, iris sends that person one direct message: the owner's message as written, followed by the notice that it is automated. instagram allows one such message per comment, within 7 days of the comment, and nothing more unless the person replies. it only sends while status.comment_triggers on get_responder is ready; needs_permission means the owner has to reconnect instagram from the responder settings page in the iris web app, unavailable means the feature isn't offered on the account yet. each message sent counts as a message against the plan. needs an API key and a connected instagram account; x402 and MPP identities cannot use it. at most 20 triggers per account, and a second trigger with the same keyword on the same post is refused. requires write scope.YesNoNot declaredNot declared
create_target_profilecreate a target profile for a campaign. requires write scope.NoNoNot declaredNot declared
delete_audiencedelete a library audience profile. campaigns it was attached to keep their copy. requires write scope.YesNoNot declaredNot declared
delete_campaignsoft-delete a campaign (sets status to deleted). requires write scope.YesNoNot declaredNot declared
delete_campaign_chatsoft-delete a chat session. requires write scope.YesNoNot declaredNot declared
delete_contactsoft-delete a contact. requires write scope.YesNoNot declaredNot declared
delete_notificationdelete a notification. requires write scope.YesNoNot declaredNot declared
delete_responder_comment_triggerdelete a comment trigger. requires write scope.YesNoNot declaredNot declared
delete_target_profiledelete a target profile from a campaign. requires write scope.YesNoNot declaredNot declared
generate_audiencesAI-generate audience profiles from a product (scrape + analysis) into the library. generated names already in the library are skipped, not overwritten. rate limited to 5 per hour. requires generate scope.NoNoNot declaredNot declared
generate_campaign_contentgenerate campaign-level outreach content (email sequence, templates) from a campaign brief. content-first: takes the strategy inline, not a campaign id. requires generate scope.NoNoNot declaredNot declared
generate_contentgenerate AI outreach content (email or DM draft) for a contact/campaign. the contact's tags + enrichment_data feed the generation context automatically. requires generate scope.NoNoNot declaredNot declared
get_ai_usageget AI generation usage limits and current counts for the billing period. requires read scope.NoYesNot declaredNot declared
get_analytics_overviewget a high-level overview of all campaign analytics. requires read scope.NoYesNot declaredNot declared
get_autopilot_statusget autopilot status: whether it's configured, the current config, the pending-review count for the standing campaign, and the latest run's step results. requires read scope.NoYesNot declaredNot declared
get_billing_plansget all available billing plans with pricing and feature limits. requires read scope.NoYesNot declaredNot declared
get_campaignget a campaign by ID with stats. requires read scope.NoYesNot declaredNot declared
get_campaign_analyticsget detailed analytics for a specific campaign. requires read scope.NoYesNot declaredNot declared
get_campaign_chat_messageslist the messages in a chat session, oldest first. `content` is an array of opaque blocks (text / tool_use / tool_result). requires read scope.NoYesNot declaredNot declared
get_campaign_usageget usage limits and current counts for a campaign. requires read scope.NoYesNot declaredNot declared
get_changelogmachine-readable release history (public) - version, date, type, summary, migration notes on breaking entries. the X-Notice header's structured backstory.NoYesNot declaredNot declared
get_contactget a contact by ID. requires read scope.NoYesNot declaredNot declared
get_contact_handlesthe contact's social handles (instagram/twitter/tiktok) - verify a handle write landed. requires read scope.NoYesNot declaredNot declared
get_contact_typesget breakdown of contacts by type/source. requires read scope.NoYesNot declaredNot declared
get_contact_usageget contact usage limits and current counts for the billing period. requires read scope.NoYesNot declaredNot declared
get_conversationget a conversation by ID with contact and campaign details. requires read scope.NoYesNot declaredNot declared
get_conversation_messagesget all messages in a conversation. requires read scope.NoYesNot declaredNot declared
get_conversation_responderget the responder's status for a single conversation: active, paused, handed off, or never seen, plus the reason and reply counts. requires read scope.NoYesNot declaredNot declared
get_discovery_jobget the status, progress, and contacts of a discovery job. status values: pending, running, completed, failed. contacts populated only when status=completed. requires read scope.NoYesNot declaredNot declared
get_engagement_metricsget overall engagement metrics across all conversations. requires read scope.NoYesNot declaredNot declared
get_performance_metricsget email performance metrics over time. requires read scope.NoYesNot declaredNot declared
get_responderget responder status: whether it's configured, the current config, connection and pause status, and activity counts for the last 30 days. requires read scope.NoYesNot declaredNot declared
get_response_timeget average response time analytics. requires read scope.NoYesNot declaredNot declared
get_usageget your current plan, quota usage (campaigns used/remaining this period), and billing period (requires read scope)NoYesNot declaredNot declared
list_audienceslist the audience library - reusable target profiles created once and attachable to any campaign. requires read scope.NoYesNot declaredNot declared
list_campaign_chatslist your iris chat sessions (the conversational campaign builder), most recently updated first, max 100. the live chat turn itself is a server-sent-events stream outside this tool set. requires read scope.NoYesNot declaredNot declared
list_campaign_contactslist contacts in a campaign with optional status filter. requires read scope.NoYesNot declaredNot declared
list_campaignslist all campaigns with optional filtering by status. requires read scope.NoYesNot declaredNot declared
list_connected_accountslist all connected social media accounts. requires read scope.NoYesNot declaredNot declared
list_contact_conversationslist all conversations for a specific contact. requires read scope.NoYesNot declaredNot declared
list_contactslist all contacts with optional search. requires read scope.NoYesNot declaredNot declared
list_conversationslist conversations with optional filtering. requires read scope.NoYesNot declaredNot declared
list_discovery_sourceslist available discovery data sources and their status. requires read scope.NoYesNot declaredNot declared
list_notificationslist user notifications. requires read scope.NoYesNot declaredNot declared
list_pending_messageslist messages awaiting approval before sending. requires read scope.NoYesNot declaredNot declared
list_responder_activitylist the responder's activity log (replies sent, handoffs, skips, and failures), newest first. requires read scope.NoYesNot declaredNot declared
list_responder_comment_triggerslist the account's comment triggers. a comment trigger watches for a keyword in instagram comments and sends the commenter one automatic DM. requires read scope.NoYesNot declaredNot declared
list_responder_postslist the account's recent instagram posts with their media ids, for limiting a comment trigger to one post. requires read scope.NoYesNot declaredNot declared
list_target_profileslist target profiles for a campaign. requires read scope.NoYesNot declaredNot declared
mark_all_notifications_readmark all notifications as read. requires write scope.NoNoNot declaredNot declared
mark_conversation_readmark a conversation as read. requires write scope.NoNoNot declaredNot declared
mark_message_sentmark a pending manual-channel draft (tiktok, or instagram cold first-touch) as sent outside the platform. API-sendable drafts must use approve_message instead. requires write scope.NoNoNot declaredNot declared
reject_messagereject a pending message with an optional reason. requires send scope.YesNoNot declaredNot declared
rename_campaign_chatrename a chat session. requires write scope.NoNoNot declaredNot declared
retry_messageretry sending a failed message. requires send scope.YesNoNot declaredNot declared
run_autopilot_nowqueue a manual autopilot run immediately (insights refresh + discovery top-up on the standing campaign). steps that already completed today are skipped. rate limited to 2 per hour. requires generate scope.NoNoNot declaredNot declared
search_campaign_contactssearch for contacts matching a campaign's target profiles. requires generate scope.NoNoNot declaredNot declared
search_contactskick off a multi-source contact discovery job (Apify-backed). returns a job_id and contacts when ready (waits up to 90s; if status=queued, poll get_discovery_job). closed source list: google_maps, instagram, twitter, tiktok, reddit. requires generate scope.NoNoNot declaredNot declared
send_channel_messagesend a message through a specific channel in a conversation. requires send scope.YesNoNot declaredNot declared
set_conversation_responderpause or resume the responder for a single conversation. pausing works on any conversation; resuming is refused after the person asked iris to stop. requires write scope.YesNoNot declaredNot declared
submit_message_feedbacksubmit feedback on an AI-generated message to improve future generations. requires send scope.NoNoNot declaredNot declared
update_campaignupdate a campaign's details. requires write scope.NoNoNot declaredNot declared
update_contactupdate a contact's details. requires write scope.NoNoNot declaredNot declared
update_conversationupdate a conversation's status: active, archived, or closed. requires write scope.NoNoNot declaredNot declared
update_notificationupdate a notification (e.g., mark as read). requires write scope.NoNoNot declaredNot declared
update_responder_comment_triggerupdate a comment trigger's keyword, message, media_id, or enabled state. give at least one field besides id. someone else's trigger, or an id that isn't a comment trigger on this account, is a 404. requires write scope.YesNoNot declaredNot declared

Details

Registry status
Active
Published
Nov 13, 2026
Updated
Nov 13, 2026
Repository
Not given
Categories (suggested)
CommunicationMarketing and SEOSuggested categories are assigned automatically from the registry text and may be wrong. Verified operators can correct them.
GDPR
Not declared

Are you the operator? Claim this listing