Model Context Protocol

Connect your AI agent to El Portal.

The El Portal MCP server exposes your personal operating system to any MCP-compatible AI client. Read your cycle state, log habits, and run daily check-ins without leaving your agent workflow.

12 toolsstdio + HTTPJSON-RPC 2.0

Capabilities

Read tools are granted on all keys by default. Write tools require explicit opt-in at key creation time.

Read tools

portal_snapshot

Full dashboard state. Active cycle, habits with streaks and done_today, goals, daily score. Optional sections: pulse_today, archives, identity, mantras.

portal_review

Cycle review data. Daily scores, habit consistency percentages, days remaining.

portal_history

Browse past versions, cycles, or debriefs. Filter by version or status.

portal_search

Full-text search across goals, habits, archives, and mantras. Up to 50 results.

Write tools

portal_log_habits

Log habits done or undone for any date. Upsert-safe. Batch up to 30. Returns updated streaks and daily score.

portal_pulse

Read or write morning/evening pulse check-ins. Covers mood, energy, sleep, stress, performance, feelings, and reflection.

portal_create_cycle

Create a complete cycle in one call: goals, habits, priorities, mantras, and carry-over goals from previous cycles.

portal_debrief_cycle

Close a cycle. Server computes stats (average score, top habits, goal completion rate). You provide the reflection.

portal_create

Create new entities: version, goal, habit, archive, mantra, or identity item. Batch up to 10.

portal_update

Partial update any entity type. Batch up to 10 operations.

portal_delete

Delete entities by ID. Cascades where applicable. Batch up to 10.

portal_settings

Read or update your user profile and app preferences.

Getting started

1. Generate an API key

Go to Settings > API Keys in El Portal. Your key is shown once on creation. Copy it immediately. Keys start with ep_ followed by 64 hex characters. SHA-256 hashed before storage, never recoverable after creation. Up to 10 active keys per account, with optional expiry up to 365 days.

2. Choose a transport

Use stdio for local AI tools (Cursor, Claude Desktop, Continue). Use HTTP for web-based agents or custom server-side integrations.

3. Add your config

Stdio (.mcp.json)

{
  "mcpServers": {
    "el-portal": {
      "type": "stdio",
      "command": "cmd",
      "args": [
        "/c", "npx", "tsx",
        "--env-file-if-exists=.env.local",
        "--tsconfig", "tsconfig.json",
        "src/mcp/index.ts"
      ],
      "env": {
        "PORTAL_API_KEY": "ep_YOUR_KEY_HERE"
      }
    }
  }
}

HTTP endpoint

POST https://app.el-portal.app/api/mcp
Authorization: Bearer ep_YOUR_KEY_HERE
Content-Type: application/json

Tool reference

All tools use JSON-RPC 2.0 via the MCP protocol. Expand each entry for parameter shapes and return values.

readportal_snapshot

Full dashboard state. Active cycle, habits with streaks and done_today, goals, daily score. Optional sections: pulse_today, archives, identity, mantras.

Parameters

include?: ("pulse_today" | "archives" | "identity" | "mantras")[]

Returns

Snapshot object with cycle, habits array, goals array, daily score, and any requested optional sections.

readportal_review

Cycle review data. Daily scores, habit consistency percentages, days remaining.

Parameters

include?: ("insights" | "pulse_history" | "debrief_stats")[]

Returns

Review object with scores array, consistency map, days remaining, and optional extras.

readportal_history

Browse past versions, cycles, or debriefs. Filter by version or status.

Parameters

type: "version" | "cycle" | "debrief", version?: string, status?: string

Returns

Array of matching historical records ordered by creation date.

readportal_search

Full-text search across goals, habits, archives, and mantras. Up to 50 results.

Parameters

query: string, limit?: number (max 50)

Returns

Array of matching entities with type, id, title, and excerpt.

writeportal_log_habits

Log habits done or undone for any date. Upsert-safe. Batch up to 30. Returns updated streaks and daily score.

Parameters

entries: { habit_id: string; status: boolean; date?: string }[], up to 30

Returns

Array of updated habit records with current streak and revised daily score.

writeportal_pulse

Read or write morning/evening pulse check-ins. Covers mood, energy, sleep, stress, performance, feelings, and reflection.

Parameters

action: "read" | "write", section: "morning" | "evening", data?: PulseData

Returns

Current pulse check-in data for the given section, or confirmation of write.

writeportal_create_cycle

Create a complete cycle in one call: goals, habits, priorities, mantras, and carry-over goals from previous cycles.

Parameters

title: string, goals: Goal[], habits: Habit[], priorities?: string[], mantras?: string[], carry_over?: string[]

Returns

Created cycle object with all nested entities and generated IDs.

writeportal_debrief_cycle

Close a cycle. Server computes stats (average score, top habits, goal completion rate). You provide the reflection.

Parameters

cycle_id: string, reflection: string

Returns

Debrief record with server-computed stats, reflection text, and closed cycle summary.

writeportal_create

Create new entities: version, goal, habit, archive, mantra, or identity item. Batch up to 10.

Parameters

entities: { type: EntityType; data: EntityData }[], up to 10

Returns

Array of created entities with generated IDs and timestamps.

writeportal_update

Partial update any entity type. Batch up to 10 operations.

Parameters

operations: { type: EntityType; id: string; data: Partial<EntityData> }[], up to 10

Returns

Array of updated entities reflecting the applied changes.

writeportal_delete

Delete entities by ID. Cascades where applicable. Batch up to 10.

Parameters

items: { type: EntityType; id: string }[], up to 10

Returns

Confirmation array with deleted IDs and cascade summary per item.

writeportal_settings

Read or update your user profile and app preferences.

Parameters

action: "read" | "update", data?: Partial<UserSettings>

Returns

Current or updated user settings object.

Examples

Get today's snapshot

{
  "method": "tools/call",
  "params": {
    "name": "portal_snapshot",
    "arguments": {
      "include": ["pulse_today"]
    }
  }
}

Log a habit

{
  "method": "tools/call",
  "params": {
    "name": "portal_log_habits",
    "arguments": {
      "entries": [
        { "habit_id": "your-habit-uuid", "status": true }
      ]
    }
  }
}

Morning check-in

{
  "method": "tools/call",
  "params": {
    "name": "portal_pulse",
    "arguments": {
      "action": "write",
      "section": "morning",
      "data": {
        "sleep_quality": "good",
        "morning_mood": "energized",
        "one_thing": "Finish the MCP docs"
      }
    }
  }
}

Permissions and rate limits

Permission model

  • read

    Granted on all keys by default. No extra configuration required.

  • write

    Opt-in per key. Toggle individual write tools during key creation or in key settings.

  • storage

    Keys are SHA-256 hashed before storage. Plaintext is never stored and cannot be recovered after creation.

Rate limits

Read toolsUnlimited
Write tools30 / min
Key creation5 / hr
Active keys10 per account

Ready to connect?

Generate your first API key in Settings and drop it into your MCP config. Full read access in under a minute.

Open Settings