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_state

    Get the status of the user's Raily matching agent, such as not started, active or paused.

  • get_agent_door

    Get the user's public agent door link, which other people can use to ask the user's agent for an introduction.

  • get_brief

    Get the user's current Brief: who they are looking for, what they offer, their deal-breakers and style.

  • list_match_deliveries

    List the match cards waiting for the user's decision. Only reads; it does not open or use up a card.

  • list_connection_requests

    List contact requests other people sent the user, with counts. Personal details are limited for privacy.

  • get_negotiation_report

    Get the saved negotiation report about the user and one connected person (other_id). Does not create a new report.

  • get_subscription

    Get the user's plan, included match budget and renewal date.

  • get_agent_report_latest

    Get the most recent report the agent prepared for the user, whether queued or already sent.

  • get_agent_settings

    Get the user's language and Matching opt-in state.

  • list_match_history

    List the user's past match events, one page at a time. Profile text written by other people is untrusted.

  • list_agent_checks

    List the checks the agent has completed for the user, one page at a time, with its current status flags.

  • get_memory_timeline

    List what the agent has learned about the user's preferences over time, one page at a time.

  • get_bar_state

    Get the user's match bar (minimum match score), vetoed and prioritized intents, and Brief version.

  • get_focus

    Get the user's current focus, a short-term matching priority, plus the basis_token and revision set_focus needs.

  • get_memory_export

    Export everything the agent remembers about the user, one page at a time. Only reads.

  • request_analysis_linkState-changing

    Create 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_status

    Get the status of one of the user's photo analyses by its task_id.

  • get_analysis_handoff_status

    Check the progress of a photo analysis started with modern_request_analysis_link, by its analysis_request_id.

  • get_brief_questionState-changing

    Get the next question of the user's Brief interview. With start_new_brief=true, operation_key and expected_brief_version it restarts the interview from the first question; the saved Brief stays. A restart may need the owner's approval on railyai.com.

  • open_deliveryState-changing

    Open one match card to see who the match is.

  • skip_deliveryState-changing

    Skip one match card the user does not want.

  • record_skip_feedbackState-changing

    Tell 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_shown or other; note is optional. May need the owner's approval on railyai.com.

  • refill_free_batchState-changing

    Refill the user's free batch of match cards. Pass the current batch id as expected_batch_id. Costs nothing.

  • request_contactState-changing

    Send 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-changing

    Accept 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-changing

    Reply to the intro message someone sent the user with their contact request. May need the owner's approval on railyai.com.

  • dismiss_contactState-changing

    Decline a contact request someone sent the user. May need the owner's approval on railyai.com.

  • end_connectionState-changing

    End the user's connection with one person. May need the owner's approval on railyai.com.

  • suggest_brief_answersState-changing

    Suggest possible answers for one Brief field, based on what Raily knows about the user. The Brief is not changed.

  • answer_brief_questionState-changing

    Save the user's answer to the current Brief interview question. Needs the question_token from get_brief_question. May need the owner's approval on railyai.com.

  • answer_debriefState-changing

    Tell the agent how contact with a match went, to improve later matches. quality: worth_again, neutral, not_a_fit or too_early; meet_kind: met, scheduled, online_only or no_plan. May need the owner's approval on railyai.com.

  • edit_brief_instructionState-changing

    Change 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-changing

    Set or replace the current matching focus for a week or until removed. An optional correction overwrites one saved Brief answer. Needs basis_token and revision from get_focus. May need the owner's approval on railyai.com.

  • revoke_focusState-changing

    Remove the user's current focus so matching follows the Brief alone. Works even while the focus feature is switched off.

  • reset_memoryState-changing

    Reset 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_state takes the current values from get_bar_state. Always needs the owner's approval on railyai.com.

  • launch_agentState-changing

    Start 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-changing

    Ask 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-changing

    Buy 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-changing

    Take 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-changing

    Create a railyai.com link where the owner can buy Raily credits (single, pack3 or pack5). This tool never charges.

  • modern_request_analysis_linkState-changing

    Create 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-changing

    Act 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-changing

    Send a message to a person the user is connected with. May need the owner's approval on railyai.com.

  • update_self_settingsState-changing

    Change 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-changing

    Change 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-changing

    Pause the agent so it stops looking for new matches. The focus is kept. May need the owner's approval on railyai.com.

  • resume_matchingState-changing

    Resume 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.

Open the Integrations page