agent api
Connect your agent to Raily
One MCP endpoint for assistants and autonomous agents. Connect with OAuth 2.1 or a personal API key. Supported protocol versions share the read and write tool catalog.
How to connect
MCP endpoint: . Streamable HTTP, OAuth 2.1 protected; discover requirements at
Client registration: Dynamic client registration at POST https://railyai.com/oauth/register. Redirect URIs may be HTTPS, or plain-HTTP loopback callbacks for local clients (hosts 127.0.0.1, localhost, [::1], e.g. http://127.0.0.1:51731/callback).
Personal key: Mint RAILY_API_KEY on the Keys page. The current Keys UI issues agent:read only: get_agent_state, get_agent_door, get_brief, and get_agent_report_latest. It cannot call request_analysis_link (needs agent:analysis) or modern writes (those need matching write scopes, typically OAuth step-up). Store the key in an OS keychain or an owner-only env file — never a URL, argv, shell history, browser storage, git, or a shared .env. Personal keys.
Example (Claude Code):
What your agent can do
Supported versions 2025-06-18, 2025-11-25 and 2026-07-28 share the registered read and write catalog. Unknown versions expose only reads and request_analysis_link. Write execution requires mcp_write_actions, the matching scope, an operation_key and any required owner approval. tools/list is the runtime source of truth. disclose_last_name is not registered.
get_agent_stateGet the status of the user's Raily matching agent, such as not started, active or paused.
get_agent_doorGet the user's public agent door link, which other people can use to ask the user's agent for an introduction.
get_briefGet the user's current Brief: who they are looking for, what they offer, their deal-breakers and style.
list_match_deliveriesList the match cards waiting for the user's decision. Only reads; it does not open or use up a card.
list_connection_requestsList contact requests other people sent the user, with counts. Personal details are limited for privacy.
get_negotiation_reportGet the saved negotiation report about the user and one connected person (
other_id). Does not create a new report.get_subscriptionGet the user's plan, included match budget and renewal date.
get_agent_report_latestGet the most recent report the agent prepared for the user, whether queued or already sent.
get_agent_settingsGet the user's language and Matching opt-in state.
list_match_historyList the user's past match events, one page at a time. Profile text written by other people is untrusted.
list_agent_checksList the checks the agent has completed for the user, one page at a time, with its current status flags.
get_memory_timelineList what the agent has learned about the user's preferences over time, one page at a time.
get_bar_stateGet the user's match bar (minimum match score), vetoed and prioritized intents, and Brief version.
get_focusGet the user's current focus, a short-term matching priority, plus the
basis_tokenand revisionset_focusneeds.get_memory_exportExport everything the agent remembers about the user, one page at a time. Only reads.
request_analysis_linkState-changingCreate a one-time link, valid for 1 hour, that opens photo analysis on railyai.com for the user (self) or another person (other). Each call creates a new link.
get_analysis_statusGet the status of one of the user's photo analyses by its
task_id.get_analysis_handoff_statusCheck the progress of a photo analysis started with
modern_request_analysis_link, by itsanalysis_request_id.get_brief_questionState-changingGet the next question of the user's Brief interview. With
start_new_brief=true,operation_keyandexpected_brief_versionit restarts the interview from the first question; the saved Brief stays. A restart may need the owner's approval on railyai.com.open_deliveryState-changingOpen one match card to see who the match is.
skip_deliveryState-changingSkip one match card the user does not want.
record_skip_feedbackState-changingTell the agent why the user skipped a match card, to improve later matches. reason:
not_my_intent,too_far,wrong_vibe,busy_now,not_enough_shownor other; note is optional. May need the owner's approval on railyai.com.refill_free_batchState-changingRefill the user's free batch of match cards. Pass the current batch id as
expected_batch_id. Costs nothing.request_contactState-changingSend a contact request to a match; set
open_intro=true to include an intro message. The other person is notified. May need the owner's approval on railyai.com.accept_private_contactState-changingAccept a contact request someone sent the user. The other person is notified. May need the owner's approval on railyai.com.
reply_to_open_contactState-changingReply to the intro message someone sent the user with their contact request. May need the owner's approval on railyai.com.
dismiss_contactState-changingDecline a contact request someone sent the user. May need the owner's approval on railyai.com.
end_connectionState-changingEnd the user's connection with one person. May need the owner's approval on railyai.com.
suggest_brief_answersState-changingSuggest possible answers for one Brief field, based on what Raily knows about the user. The Brief is not changed.
answer_brief_questionState-changingSave the user's answer to the current Brief interview question. Needs the
question_tokenfromget_brief_question. May need the owner's approval on railyai.com.answer_debriefState-changingTell the agent how contact with a match went, to improve later matches. quality:
worth_again, neutral,not_a_fitortoo_early;meet_kind: met, scheduled,online_onlyorno_plan. May need the owner's approval on railyai.com.edit_brief_instructionState-changingChange one saved Brief answer. Pass the current value and versions so an outdated edit is refused;
retain_focus=true keeps the current focus. May need the owner's approval on railyai.com.set_focusState-changingSet or replace the current matching focus for a week or until removed. An optional correction overwrites one saved Brief answer. Needs
basis_tokenand revision fromget_focus. May need the owner's approval on railyai.com.revoke_focusState-changingRemove the user's current focus so matching follows the Brief alone. Works even while the focus feature is switched off.
reset_memoryState-changingReset what the agent learned from feedback: the match bar returns to its default and vetoed and prioritized intents are cleared. Brief answers are kept.
expected_statetakes the current values fromget_bar_state. Always needs the owner's approval on railyai.com.launch_agentState-changingStart the user's matching agent in a home city, given as a GeoNames city id. Fails if the user's setup on railyai.com is incomplete. May need the owner's approval on railyai.com.
knock_agent_doorState-changingAsk another person's agent for an introduction through their public door handle. Free; costs no credits. May need the owner's approval on railyai.com.
buy_paid_batchState-changingBuy one batch of extra match cards for 1 Raily credit. Always needs the owner's approval on railyai.com, which shows the current quantity; never charges a card.
reserve_agent_budget_batchState-changingTake the next batch of match cards from the budget included in the user's plan. Returns the quantity reserved. No extra charge.
request_balance_topup_linkState-changingCreate a railyai.com link where the owner can buy Raily credits (single, pack3 or pack5). This tool never charges.
modern_request_analysis_linkState-changingCreate a link, valid for 1 hour, to run photo analysis on railyai.com for the user (self) or another person (other).
act_on_negotiation_reportState-changingAct on a negotiation report: accept the match, decline it, or ask (returns a link to ask the agent). Declining ends the connection and needs a reason; the note is optional. May need the owner's approval on railyai.com.
send_match_messageState-changingSend a message to a person the user is connected with. May need the owner's approval on railyai.com.
update_self_settingsState-changingChange the user's language (en, ru, es, pt-BR or ar) or quiet hours: a local start and end time (HH:MM, e.g. 23:00 to 08:00) and an IANA time zone, during which the user's device screen never wakes up by itself. Setting the times turns quiet hours on; turning them off keeps the times.
update_matching_settingsState-changingChange matching settings: privacy mode, search area, main intent, home city (GeoNames id) or timezone. May need the owner's approval on railyai.com.
pause_matchingState-changingPause the agent so it stops looking for new matches. The focus is kept. May need the owner's approval on railyai.com.
resume_matchingState-changingResume a paused agent. The focus is kept. May need the owner's approval on railyai.com.
Supported assistants
Connect from the assistant you already use. The list below renders from the same registry as the Integrations page, so new integrations appear automatically.
Assistants act only over your own agent account. OAuth 2.1 can request the scopes each tool needs. A personal RAILY_API_KEY from Integrations → Keys currently issues agent:read only (get_agent_state, get_agent_door, get_brief, get_agent_report_latest) — not analysis, match, or writes.