Call Me

Your AI rings your iPhone, speaks its question, and gets your spoken answer back as text.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
68%
Naming quality
93%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,030Tokens (tool definitions)
~748 BTypical response size
Moderate attention impact (0.80% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "call-me": {
      "url": "https://serdaroztetik.com/aiphone/mcp"
    }
  }
}

Remote endpoints

https://serdaroztetik.com/aiphone/mcpstreamable-http

What it can do

Tool inventory

Tools (6)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢setup

Return first-setup instructions and a clickable App Store download link when no number is available.

Input Schema

{
  "type": "object",
  "properties": {},
  "title": "setupArguments"
}
🔴call(question, to, from_label, session_token)

Ring the human's iPhone, read `question` aloud word for word, and return what they say back. It does not have to be a question: an update or a summary of the day ahead works too, up to 2000 characters (about two minutes of speech). Waits up to ~30s; if the result comes back status "ringing" or "in_call", follow up with poll_result. On a local client, read `to` from `~/.aiphone/config.json` → `user_number`; this hosted server cannot read that file itself. It is a Call Me app number, not a regular phone number. If missing, returns setup_required with the App Store link. Pass a previous session_token to stay in the same thread on their phone.

Input Schema

{
  "type": "object",
  "properties": {
    "question": {
      "title": "Question",
      "type": "string"
    },
    "to": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "To"
    },
    "from_label": {
      "default": "Someone's AI",
      "title": "From Label",
      "type": "string"
    },
    "session_token": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Session Token"
    }
  },
  "required": [
    "question"
  ],
  "title": "callArguments"
}
🟢poll_result(call_id, session_token)

Check on a call that was still ringing or in progress. Waits up to ~25s for it to settle; returns the final status and transcript once the call ends, the human declines, or the ring times out ("missed").

Input Schema

{
  "type": "object",
  "properties": {
    "call_id": {
      "title": "Call Id",
      "type": "integer"
    },
    "session_token": {
      "title": "Session Token",
      "type": "string"
    }
  },
  "required": [
    "call_id",
    "session_token"
  ],
  "title": "poll_resultArguments"
}
🔴text(body, to, from_label, session_token)

Send a one-way text to the human's phone (push notification, no ring). On a local client, read `to` from `~/.aiphone/config.json` → `user_number`; this hosted server cannot read that file itself. If missing, returns setup_required with the App Store link. Pass a previous session_token to stay in the same thread.

Input Schema

{
  "type": "object",
  "properties": {
    "body": {
      "title": "Body",
      "type": "string"
    },
    "to": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "To"
    },
    "from_label": {
      "default": "Someone's AI",
      "title": "From Label",
      "type": "string"
    },
    "session_token": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Session Token"
    }
  },
  "required": [
    "body"
  ],
  "title": "textArguments"
}
🟢wait_for_reply(session_token, cursor, wait_s)

Wait for the human to send something back to this session — texts and voicemail transcripts arrive here. Long-polls up to wait_s (max 30s); returns {events, cursor}. Pass the returned cursor next time to only see new events. An empty events list just means nothing yet — poll again if you are still waiting.

Input Schema

{
  "type": "object",
  "properties": {
    "session_token": {
      "title": "Session Token",
      "type": "string"
    },
    "cursor": {
      "default": 0,
      "title": "Cursor",
      "type": "integer"
    },
    "wait_s": {
      "default": 25,
      "title": "Wait S",
      "type": "integer"
    }
  },
  "required": [
    "session_token"
  ],
  "title": "wait_for_replyArguments"
}
🔴set_thread_title(session_token, title)

Name this session's conversation thread on the human's phone (e.g. the project or task you are working on). Shown as the thread title in the app.

Input Schema

{
  "type": "object",
  "properties": {
    "session_token": {
      "title": "Session Token",
      "type": "string"
    },
    "title": {
      "title": "Title",
      "type": "string"
    }
  },
  "required": [
    "session_token",
    "title"
  ],
  "title": "set_thread_titleArguments"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded6 tools
verifiedversion not recorded6 tools
verifiedversion not recorded6 tools