uncorreotemporal-mcp
MCP server for UnCorreoTemporal, focused on autonomous signup and email verification workflows.
Architecture Demo
AI Agent
|
| MCP
v
Temporary Email MCP Server
|
v
UnCorreoTemporal API
Quickstart (30 seconds)
uvx uncorreotemporal-mcp
Or run local project version:
UCT_API_KEY=uct_your_key_here \
uv run uncorreotemporal-mcp
Minimal Workflow Example
inbox = await create_signup_inbox("github")
email = await wait_for_verification_email(inbox["inbox_id"])
link = await extract_verification_link(
inbox_id=inbox["inbox_id"],
message_id=email["message_id"],
)
Public Tools
create_signup_inboxwait_for_verification_emailget_latest_emailextract_otp_codeextract_verification_linkcomplete_signup_flow
New v1 tool: complete_signup_flow
Runs:
- create inbox
- wait verification email
- extract verification link + OTP
Input:
{
"service_name": "github",
"timeout_seconds": 90,
"poll_interval_seconds": 3,
"subject_contains": "verify",
"from_contains": "noreply",
"preferred_domains": ["github.com"],
"ttl_minutes": 30
}
Output:
{
"status": "success",
"inbox_id": "[email protected]",
"email": "[email protected]",
"verification_message": {
"message_id": "msg-1",
"subject": "Verify your email",
"from_address": "[email protected]",
"received_at": "2026-03-08T11:30:00Z"
},
"verification_link": "https://example.com/confirm?t=abc",
"otp_code": "483920",
"link_candidates": ["https://example.com/confirm?t=abc"],
"otp_candidates": ["483920"]
}
status can be success, partial_success, or timeout.
Tool I/O summary
create_signup_inbox(service_name, ttl_minutes?)
Returns:
{
"inbox_id": "[email protected]",
"email": "[email protected]",
"expires_at": "2026-03-08T12:00:00Z",
"service_name": "github"
}
wait_for_verification_email(inbox_id, timeout_seconds?, poll_interval_seconds?, subject_contains?, from_contains?)
Returns:
{
"status": "received",
"message_id": "msg-1",
"received_at": "2026-03-08T11:30:00Z",
"subject": "Verify your account",
"from_address": "[email protected]",
"timeout_seconds": 90
}
get_latest_email(inbox_id, mark_as_read?)
Returns full message body and metadata.
extract_otp_code(message_text? | inbox_id+message_id, otp_length_min?, otp_length_max?)
Returns:
{
"otp_code": "483920",
"candidates": ["483920"]
}
extract_verification_link(message_text? | inbox_id+message_id, preferred_domains?)
Returns:
{
"verification_link": "https://example.com/confirm?t=abc",
"candidates": ["https://example.com/confirm?t=abc"]
}
Configuration
Environment variables:
UCT_API_KEY(required)UCT_API_BASE(optional, default:https://uncorreotemporal.com)UCT_HTTP_TIMEOUT_SECONDS(optional, default:20)UCT_MCP_TRANSPORT(optional,stdioby default; also supportsstreamable-httpandsse)UCT_MCP_HOST(optional, default:0.0.0.0)UCT_MCP_PORT(optional, default:8000)UCT_MCP_PATH(optional, default:/mcp)
Important: inbox_id == email address.
Examples
See /examples:
simple_workflow.pyopenai_agent_signup.pylangchain_agent_signup.pyagent_creates_account.py
Run dry-run:
uv run python examples/simple_workflow.py --dry-run
Docker
Build:
docker build -t uncorreotemporal-mcp .
Run stdio mode:
docker run --rm -i \
-e UCT_API_KEY=uct_your_key_here \
uncorreotemporal-mcp
Run streamable-http mode:
docker run --rm -p 8000:8000 \
-e UCT_API_KEY=uct_your_key_here \
-e UCT_MCP_TRANSPORT=streamable-http \
-e UCT_MCP_PATH=/mcp \
uncorreotemporal-mcp
Breaking Changes
Removed legacy low-level tools:
create_mailboxlist_mailboxesget_messagesread_messagedelete_mailbox
Migration map:
create_mailbox->create_signup_inboxget_messages+read_message->wait_for_verification_email+get_latest_email- multi-step signup orchestration ->
complete_signup_flow
Directory listing assets
Prepared listing payloads are in /directory-listings for:
- modelcontextprotocol/servers
- mcp.so
- awesome-mcp
Public endpoint deployment
Deployment templates for https://uncorreotemporal.com/mcp are in /deploy.
Development
uv run pytest
uv run uncorreotemporal-mcp