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.
Capabilities
Read tools are granted on all keys by default. Write tools require explicit opt-in at key creation time.
Read tools
portal_snapshotFull dashboard state. Active cycle, habits with streaks and done_today, goals, daily score. Optional sections: pulse_today, archives, identity, mantras.
portal_reviewCycle review data. Daily scores, habit consistency percentages, days remaining.
portal_historyBrowse past versions, cycles, or debriefs. Filter by version or status.
portal_searchFull-text search across goals, habits, archives, and mantras. Up to 50 results.
Write tools
portal_log_habitsLog habits done or undone for any date. Upsert-safe. Batch up to 30. Returns updated streaks and daily score.
portal_pulseRead or write morning/evening pulse check-ins. Covers mood, energy, sleep, stress, performance, feelings, and reflection.
portal_create_cycleCreate a complete cycle in one call: goals, habits, priorities, mantras, and carry-over goals from previous cycles.
portal_debrief_cycleClose a cycle. Server computes stats (average score, top habits, goal completion rate). You provide the reflection.
portal_createCreate new entities: version, goal, habit, archive, mantra, or identity item. Batch up to 10.
portal_updatePartial update any entity type. Batch up to 10 operations.
portal_deleteDelete entities by ID. Cascades where applicable. Batch up to 10.
portal_settingsRead 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/jsonTool reference
All tools use JSON-RPC 2.0 via the MCP protocol. Expand each entry for parameter shapes and return values.
readportal_snapshot
portal_snapshotFull 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
portal_reviewCycle 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
portal_historyBrowse 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
portal_searchFull-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
portal_log_habitsLog 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
portal_pulseRead 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
portal_create_cycleCreate 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
portal_debrief_cycleClose 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
portal_createCreate 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
portal_updatePartial 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
portal_deleteDelete 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
portal_settingsRead 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 tools | Unlimited |
| Write tools | 30 / min |
| Key creation | 5 / hr |
| Active keys | 10 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