ORDan

io.github.joshluberissePublished by GitHub account joshluberissev0.1.4Updated Nov 7, 2026

ORDan's MCP server: calls, SMS and phone numbers for AI agents, under their owner's spend controls

VerifiedStreamable HTTPWeb executableFinanceCommunication & Collaboration

Overview

AI-generated overview

ORDan gives an AI agent its own phone Lines: place and answer calls, send and read SMS, and buy numbers under an owner's spend controls.

What you can do
  • Register an agent and check whether its owner has approved it
  • Provision, list, rename, cap or release phone Lines and numbers
  • Place, poll, answer, transfer, hang up and key DTMF on calls, and start or stop recording
  • Send and read SMS, including full conversations with one number
  • Check policy, authorize, complete or cancel purchases, and read spend and the event ledger
When to use it
Use it when an assistant needs to act as a phone-capable agent: making outbound calls, answering inbound ones, texting, or buying numbers, with the owner approving sensitive actions and setting spend limits.
Requirements
A remote endpoint or the npm package run with npx; OAuth pairing, or an agent credential in ORDAN_AGENT_TOKEN as an alternative. Optional ORDAN_API_URL, ORDAN_CONFIG_DIR and ORDAN_PROFILE settings. Owner approval is needed before the other tools work.
Before you install
The agent can spend the owner's money: Lines have monthly ceilings, purchases are authorized by policy (by default up to $50 each) and above that need owner approval. Calls, texts, transfers and purchases are policy-checked and may require approval. Recording requires calls.record and recordings belong to the owner. DTMF input marked sensitive is masked in the owner's ledger. Credentials are held by the runtime; ORDAN_AGENT_TOKEN is a secret.

Installation

In SourceWeft

  1. Open ORDan in the dashboard and add it to a workspace.
  2. Connect the required credentials. They are stored privately and never shown on public pages.
  3. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.joshluberisse%2Fordan/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config. The client completes OAuth sign-in on first connect.

{
  "mcpServers": {
    "ordan": {
      "type": "http",
      "url": "https://mcp.ordan.io/mcp"
    }
  }
}

README

This repository has no README.

Tools

25

ordan.agent.create

Pair with your owner

Register a persistent agent principal. Asks your owner to approve you on ORDan: returns a pairing URL and code for the human. Once approved, this runtime holds your credential (you never see it) and the other ordan.* tools work.

Parametersnamerequiredcapabilitiesmonthly_limit_cents

ordan.agent.status

Connection status

Whether your owner has approved you yet, and what you may do.

Takes no parameters.

ordan.line.provision

Get a new Line

Provision a phone identity for an agent: a new Line with its own number, bound to you.

Parametersnamecountryapprovalarea_codeidempotency_key

ordan.line.list

List your Lines

List your Lines, with each one's spend this month.

Takes no parameters.

ordan.line.update

Update a Line

Rename a Line, or set its monthly spend ceiling in cents (spend ceilings are an owner/key decision — an agent credential can only rename).

Parameterslinerequirednamespend_limit_cents

ordan.line.release

Release a Line

Release one of your Lines and its number (requires numbers.release).

Parameterslinerequired

ordan.number.list

List your numbers

List your numbers, each with the Line it is attached to: those on your Lines, and any you bought that are not on a Line (requires numbers.provision or numbers.release). Use it to find a number that was bought but not attached to a Line.

Takes no parameters.

ordan.number.release

Release a number

Release a number you bought that is not in use on a Line back to the carrier (requires numbers.release). A number on a Line goes with its Line: use ordan.line.release.

Parametersnumberrequired

ordan.call.create

Place a call

Place a policy-checked outbound call. If you have one Line it is used; with several, pass `line`. If policy needs a human, the error carries details.approval_request (apr_…): retry with `approval` set to it once your owner approves.

Parameterstorequiredlinepurposeapprovalcategoryobjectiveidempotency_keymax_duration_seconds

ordan.call.status

Call status

Poll live call state.

Parameterscallrequired

ordan.call.transfer

Transfer a call

Hand off to a human, mid-call: transfer an in-progress call (policy-checked). If the destination needs your owner's approval, the error carries details.approval_request (apr_…): retry with `approval` once they approve.

Parameterstorequiredcallrequiredpurposeapprovalcategoryidempotency_key

ordan.call.list

List your calls

List your recent calls. status=ringing shows inbound calls waiting to be answered.

Parameterslinestatus

ordan.call.answer

Answer a call

Answer a ringing inbound call routed to you (decline with ordan.call.hangup).

Parameterscallrequired

ordan.call.hangup

Hang up

Hang up a call.

Parameterscallrequired

ordan.call.dtmf

Press keys on a call

Navigate a phone menu: press keys (DTMF) on a connected call you hold, e.g. "1" or "2w123#" (w = half-second pause). Set sensitive for PINs or account numbers: your owner's ledger shows them masked.

Parameterscallrequireddigitsrequiredsensitive

ordan.call.record

Record a call

Start or stop recording a connected call (requires calls.record). Recordings belong to your owner: you see that one exists, not its audio.

Parameterscallrequiredactionrequired

ordan.call.report

Report a call's outcome

Report what happened on a call you made or answered: its transcript and/or its structured outcome (e.g. outcome: appointment_rescheduled, fields: { date, time }). Each is recorded once, in your ledger; ORDan adds the call's measured duration.

Parameterscallrequiredfieldsoutcomesummarytranscript

ordan.sms.send

Send an SMS

Send a message from the agent's line. With several Lines, pass `line`. Approval works as for ordan.call.create.

Parameterstorequiredbodyrequiredlinepurposeapprovalcategorysmart_encodingidempotency_key

ordan.sms.read

Read your messages

Read your messages: replies and what you sent. Pass `with` for the whole conversation with one number.

Parameterswithdirection

ordan.policy.check

Check an action against policy

Evaluate an action before execution: would policy allow it right now? The action is the capability it uses: voice.outbound (a call), sms.send (a text), calls.transfer (a hand-off) or purchases (a purchase: pass merchant and amount_cents).

Parameterstobodycalllineactionrequiredpurposecategorymerchantamount_centssmart_encoding

ordan.purchase.authorize

Authorize a purchase

Ask before you buy: authorize a purchase on your owner's behalf (requires purchases). Within policy (by default up to $50 each) it is authorized at once; above it your owner approves first (retry with `approval`). ORDan never sees card data: pay the merchant yourself, then call ordan.purchase.complete with what was charged.

Parameterspurposeapprovalcategorymerchantrequireddescriptionrequiredamount_centsrequired

ordan.purchase.complete

Complete a purchase

Record that you made an authorized purchase: what was actually charged (never more than authorized) and the merchant's confirmation number.

Parametersreceiptpurchaserequiredamount_centsrequired

ordan.purchase.cancel

Cancel a purchase

Give back an authorization you will not use.

Parameterspurchaserequired

ordan.usage.get

Usage this month

Read spend against limits for this month.

Takes no parameters.

ordan.ledger.read

Read your ledger

Read the agent's event history: what happened (calls, texts, approvals) and what it cost.

Parameterslimitsincetypes

Version history

3
  1. v0.1.4LatestNov 6, 2026
  2. v0.1.3Nov 5, 2026
  3. v0.1.2Nov 3, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listed15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

    Declare a license in the repository or the registry entry.