MCP Servers

A collection of Model Context Protocol servers, templates, tools and more.

Custom stdio MCP server for the Omi AI wearable platform. 38 tools, dual auth (Dev API + Firebase), zero dependencies.

Created 2/24/2026
Updated about 9 hours ago
Repository documentation and setup instructions

Omi MCP Server

A custom MCP (Model Context Protocol) server that connects Claude to the full Omi platform - 38 tools covering memories, conversations, action items, goals, transcript editing, speaker management, and more.

Why This Exists

Omi provides an official MCP server using SSE (Server-Sent Events) transport. Two problems:

  1. Firewall issues on managed devices. SSE maintains persistent long-lived HTTP connections. On Windows, this triggers "Allow Node.js through Windows Firewall?" prompts. On a work-managed device, that's a non-starter.

  2. No Internal API access. The official MCP only uses the Developer API key. It can't edit transcript text, assign speakers to segments, query conversations by status, reprocess conversations, or manage apps/templates - all of which require Firebase authentication.

This server solves both:

  • stdio transport - standard outbound HTTPS requests only, no persistent connections, no firewall prompts
  • Dual authentication - Developer API key for standard CRUD + Firebase tokens for Internal API access, on a single server

Prerequisites

  • Node.js 24+ (uses built-in fetch() - zero npm dependencies)
  • Omi account with the Omi mobile app installed
  • Claude Code or Claude Desktop (any MCP-compatible client works)

Setup

1. Get Your Credentials

You need three values:

Developer API Key

  1. Open the Omi mobile app
  2. Go to Settings > Developer
  3. Tap "Create Key"
  4. Copy the key (shown once, starts with omi_dev_)

Keys are case-sensitive - it's omi_dev_ lowercase, not Omi_dev_.

Firebase Refresh Token

This gives access to Omi's Internal API (transcript editing, speaker assignment, conversation lifecycle). If you only need the Developer API tools, you can skip this.

  1. Open omi.me in Chrome and log in
  2. Open DevTools (F12)
  3. Go to the Application tab
  4. In the left sidebar, expand IndexedDB
  5. Find firebaseLocalStorageDb
  6. Click into the object store
  7. Find the entry with your user data
  8. Navigate to: value > stsTokenManager > refreshToken
  9. Copy the refresh token string

The refresh token doesn't expire unless you change your password or explicitly revoke sessions. You only need to do this once.

Firebase API Key

This identifies Omi's Firebase project. It's not a secret (it's embedded in the web app), but you need the correct one to avoid PROJECT_NUMBER_MISMATCH errors.

Important: Omi has two Firebase projects. The key in the GitHub repo (AIzaSyC1U6S-...) is the dev project. Production users need the production key. Check the Omi web app's network requests or source to find the current production key.

2. Register the Server

Claude Code (CLI)

claude mcp add --scope user omi \
  node /path/to/omi-mcp-server.js \
  -e OMI_DEV_API_KEY=omi_dev_your_key \
  -e OMI_FIREBASE_API_KEY=your_firebase_api_key \
  -e OMI_FIREBASE_REFRESH_TOKEN=your_refresh_token

Replace /path/to/ with the actual path to omi-mcp-server.js.

Claude Desktop

Add to your config file (%APPDATA%\Claude\claude_desktop_config.json on Windows, ~/Library/Application Support/Claude/claude_desktop_config.json on macOS):

{
  "mcpServers": {
    "omi": {
      "command": "node",
      "args": ["/path/to/omi-mcp-server.js"],
      "env": {
        "OMI_DEV_API_KEY": "omi_dev_your_key",
        "OMI_FIREBASE_API_KEY": "your_firebase_api_key",
        "OMI_FIREBASE_REFRESH_TOKEN": "your_refresh_token"
      }
    }
  }
}

3. Verify

After registration, your MCP client should list all 38 tools. Try a simple read operation:

Get my latest 5 Omi memories

Tool Reference

Developer API Tools (API Key Auth)

These tools use your OMI_DEV_API_KEY for authentication.

Memories (5 tools)

| Tool | Description | |------|-------------| | get_memories | List memories with pagination and category filter | | create_memory | Create a single memory (fact, insight, note) | | create_memories_batch | Create up to 25 memories at once | | update_memory | Update content, visibility, tags, or category | | delete_memory | Permanently delete a memory |

Conversations (6 tools)

| Tool | Description | |------|-------------| | get_conversations | List completed conversations with filters | | get_conversation | Get a single conversation by ID (with optional transcript) | | create_conversation | Create from plain text (runs full processing pipeline) | | create_conversation_from_segments | Create from structured transcript segments with speaker/timing data | | update_conversation | Update title or discard status | | delete_conversation | Permanently delete a conversation |

Action Items (5 tools)

| Tool | Description | |------|-------------| | get_action_items | List action items with status/date/conversation filters | | create_action_item | Create a standalone action item | | create_action_items_batch | Create up to 50 action items at once | | update_action_item | Update description, completion status, or due date | | delete_action_item | Permanently delete an action item |

Goals (6 tools)

| Tool | Description | |------|-------------| | get_goals | List active goals (boolean, scale, or numeric types) | | create_goal | Create a new goal (max 3 active) | | update_goal | Update title, values, or unit | | update_goal_progress | Quick progress value update | | get_goal_history | Get progress history over time (up to 365 days) | | delete_goal | Delete a goal |

Internal API Tools (Firebase Auth)

These tools use Firebase ID tokens. They require OMI_FIREBASE_API_KEY and OMI_FIREBASE_REFRESH_TOKEN.

Conversation Lifecycle (3 tools)

| Tool | Description | |------|-------------| | get_conversations_by_status | List conversations by status: in_progress, processing, merging, completed, failed | | process_in_progress_conversation | Force-process a stuck in_progress conversation | | reprocess_conversation | Regenerate title/overview/action items from transcript |

Search & Merge (2 tools)

| Tool | Description | |------|-------------| | search_conversations | Full-text search across all conversations | | merge_conversations | Combine fragmented recordings into one conversation |

Transcript Editing (2 tools)

| Tool | Description | |------|-------------| | edit_segment_text | Fix transcription errors in a specific segment | | assign_segments | Bulk assign speaker identity (is_user or person_id) |

App/Template Management (5 tools)

| Tool | Description | |------|-------------| | get_enabled_apps | List installed apps/templates | | get_app_details | Get full app details by ID | | enable_app | Install an app/template | | disable_app | Disable without deleting | | delete_app | Permanently delete (user-owned only) |

People/Speaker Profiles (4 tools)

| Tool | Description | |------|-------------| | get_people | List all speaker profiles with speech samples | | create_person | Create a new speaker profile | | update_person_name | Rename a speaker profile | | delete_person | Delete profile and all speech samples |

Troubleshooting

"Allow Node.js through Windows Firewall?" prompt

You're using the SSE-based official server, not this one. This stdio server makes standard outbound HTTPS requests only - no firewall prompts.

PROJECT_NUMBER_MISMATCH error

You're using the wrong Firebase API key. Omi has two Firebase projects (dev and production). Make sure your OMI_FIREBASE_API_KEY matches the Firebase project your account is on. If your account is on production omi.me, you need the production key - not the dev key from the GitHub repo.

API key not working / 401 errors

  • Dev API keys are case-sensitive: omi_dev_ (lowercase), not Omi_dev_
  • Check that the key is correctly set in your environment variables
  • Verify the key hasn't been revoked in the Omi mobile app

assign_segments returns 404

The endpoint URL format matters. This server uses the Internal API path (/v1/conversations/{id}/segments/assign), not the Developer API path (/v1/dev/user/conversations/{id}/segments/assign). If you've modified the code, verify the path.

Firebase token refresh fails

Your refresh token may have been revoked (password change, session revocation). Re-extract it from omi.me browser IndexedDB following the setup steps above.

Conversations stuck in "processing" status

Use get_conversations_by_status to find them, then process_in_progress_conversation or reprocess_conversation to push them through. This commonly happens after Bluetooth disconnects or app crashes.

Environment Variables

| Variable | Required | Description | |----------|----------|-------------| | OMI_DEV_API_KEY | Yes | Omi Developer API key (omi_dev_xxx) | | OMI_FIREBASE_API_KEY | For Internal API tools | Firebase project API key | | OMI_FIREBASE_REFRESH_TOKEN | For Internal API tools | Firebase refresh token from browser | | OMI_API_BASE_URL | No | Override API base URL (default: https://api.omi.me) |

License

MIT - see LICENSE.

Quick Setup
Installation guide for this server

Install Package (if required)

npx @modelcontextprotocol/server-tillys-omi-mcp

Cursor configuration (mcp.json)

{ "mcpServers": { "tilly-gdf-tillys-omi-mcp": { "command": "npx", "args": [ "tilly-gdf-tillys-omi-mcp" ] } } }