Directory / Work & productivity
Mooi
Plan group gatherings with dates, availability votes, questions and decisions; no login or API key, email required to join an event. Endpoint: https://mooi.fyi/mcp
Live Answered an MCP handshake without credentials and listed 18 tools.
- Category
- Work & productivity
- Transport
http- Source
- https://mooi.fyi/docs
- Endpoint
https://mooi.fyi/mcp- Reports itself as
- Mooi 1.0.0
- Protocol
- 2025-06-18
- Tools
- 18
- Context cost
- about 4,640 tokens for the tool definitions (estimated at four characters per token)
- Tool definitions last changed
- no change seen since first check
- Handshake time
- 352 ms
- Last checked
- 2026-11-03 16:08:52 UTC
- Listed since
- 2026-11-03
Health and compatibility
| Endpoint reachable | Verified | Responded in 352 ms |
|---|---|---|
| MCP handshake (initialize) | Verified | Completed without credentials |
| Tool discovery (tools/list) | Verified | 18 tools listed |
| Authentication | Verified | None needed to connect |
| Protocol version | Verified | 2025-06-18 |
| Transport | Verified | Streamable HTTP |
| Capabilities declared | Verified | tools |
Last checked . Verified means the check saw it happen; it says nothing about whether the server is safe.
Recent history
1 daily check so far. Green answered, violet asked for auth, red did not answer.
Set up in your client
Claude Code
Run this in a terminal:
claude mcp add --transport http mooi https://mooi.fyi/mcpClaude Desktop
Open Settings → Connectors → Add custom connector and paste this URL:
https://mooi.fyi/mcpOr bridge it through mcp-remote in claude_desktop_config.json (needs Node.js):
{
"mcpServers": {
"mooi": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://mooi.fyi/mcp"
]
}
}
}Cursor
Or add it to ~/.cursor/mcp.json (or .cursor/mcp.json in a project):
{
"mcpServers": {
"mooi": {
"url": "https://mooi.fyi/mcp"
}
}
}VS Code
Or add it to .vscode/mcp.json:
{
"servers": {
"mooi": {
"type": "http",
"url": "https://mooi.fyi/mcp"
}
}
}Or from a terminal:
code --add-mcp '{"name": "mooi", "type": "http", "url": "https://mooi.fyi/mcp"}'Windsurf
Add it to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"mooi": {
"serverUrl": "https://mooi.fyi/mcp"
}
}
}Other clients
Most clients accept this shape. The endpoint is:
https://mooi.fyi/mcp{
"mcpServers": {
"mooi": {
"type": "http",
"url": "https://mooi.fyi/mcp"
}
}
}If it does not connect
- Restart the client after editing a config file, and keep keys out of files you commit.
- If the tools do not appear, open the client's MCP log: a 401 means the credentials were not accepted, and a timeout means the server did not answer.
Tools 18
Names, descriptions and input schemas exactly as the server returned them on 2026-11-03. This is the server author's own text. Nothing is run from this page. Labels such as read-only are declared by the server and are not verified. Raw JSON
acknowledge_changescan modifydestructiveexternal accessRecord that you have read changes up to a version. Does not send email or create a new change.
Record that you have read changes up to a version. Does not send email or create a new change.
| Parameter | Type | Description | |
|---|---|---|---|
eventId | string | required | |
participantId | string | required | |
agent | string | optional | |
requestId | string | required | |
version | integer | required |
Example call (required arguments only, placeholder values):
{
"method": "tools/call",
"params": {
"name": "acknowledge_changes",
"arguments": {
"eventId": "...",
"participantId": "...",
"requestId": "...",
"version": 0
}
}
}add_commentcan modifydestructiveexternal accessPost a message or answer a question. questionId attaches it to that discussion. Returns a direct comment link.
Post a message or answer a question. questionId attaches it to that discussion. Returns a direct comment link.
| Parameter | Type | Description | |
|---|---|---|---|
eventId | string | required | |
participantId | string | required | |
agent | string | optional | |
requestId | string | required | |
body | string | required | |
questionId | string | optional |
Example call (required arguments only, placeholder values):
{
"method": "tools/call",
"params": {
"name": "add_comment",
"arguments": {
"eventId": "...",
"participantId": "...",
"requestId": "...",
"body": "..."
}
}
}add_poll_optioncan modifydestructiveexternal accessAdd an option to an open question, such as a city or restaurant.
Add an option to an open question, such as a city or restaurant.
| Parameter | Type | Description | |
|---|---|---|---|
eventId | string | required | |
participantId | string | required | |
agent | string | optional | |
requestId | string | required | |
questionId | string | required | |
label | string | required |
Example call (required arguments only, placeholder values):
{
"method": "tools/call",
"params": {
"name": "add_poll_option",
"arguments": {
"eventId": "...",
"participantId": "...",
"requestId": "...",
"questionId": "...",
"label": "..."
}
}
}ask_questioncan modifydestructiveexternal accessAsk a question or create a poll. Use kind city first, then restaurant with parentId pointing to the city …
Ask a question or create a poll. Use kind city first, then restaurant with parentId pointing to the city question. Empty options allow an open discussion.
| Parameter | Type | Description | |
|---|---|---|---|
eventId | string | required | |
participantId | string | required | |
agent | string | optional | |
requestId | string | required | |
title | string | required | |
kind | string | optional | One of: city, restaurant, general |
parentId | string | optional | |
options | string[] | optional |
Example call (required arguments only, placeholder values):
{
"method": "tools/call",
"params": {
"name": "ask_question",
"arguments": {
"eventId": "...",
"participantId": "...",
"requestId": "...",
"title": "..."
}
}
}create_eventcan modifydestructiveexternal accessCreate an event and register its host. Supply a random UUID requestId and reuse it for uncertain retries, …
Create an event and register its host. Supply a random UUID requestId and reuse it for uncertain retries, including across HTTP/MCP clients. Give personalUrl only to the host; share the plain url with invitees. Email is required for event updates.
| Parameter | Type | Description | |
|---|---|---|---|
requestId | string | optional | |
title | string | required | |
description | string | optional | |
timezone | string | required | |
name | string | required | |
email | string | required | |
agent | string | optional | |
emailAccess | boolean | optional |
Example call (required arguments only, placeholder values):
{
"method": "tools/call",
"params": {
"name": "create_event",
"arguments": {
"title": "...",
"timezone": "...",
"name": "...",
"email": "..."
}
}
}decide_questioncan modifydestructiveexternal accessRecord the current choice of city, restaurant or other detail, or reopen a question. Agents may decide using …
Record the current choice of city, restaurant or other detail, or reopen a question. Agents may decide using the group’s responses and discussion without separate human approval. State unresolved assumptions; do not claim unanimous human approval from vote counts or silence. A human veto requires reopening and finding an alternative.
| Parameter | Type | Description | |
|---|---|---|---|
eventId | string | required | |
participantId | string | required | |
agent | string | optional | |
requestId | string | required | |
questionId | string | required | |
decision | string | optional | |
reopen | boolean | optional |
Example call (required arguments only, placeholder values):
{
"method": "tools/call",
"params": {
"name": "decide_question",
"arguments": {
"eventId": "...",
"participantId": "...",
"requestId": "...",
"questionId": "..."
}
}
}get_changesread-onlyFetch changes strictly after sinceVersion. Save nextVersion only after processing. Read-only: never emails …
Fetch changes strictly after sinceVersion. Save nextVersion only after processing. Read-only: never emails participants. Poll every 300 seconds if you cannot monitor email.
| Parameter | Type | Description | |
|---|---|---|---|
eventId | string | required | |
sinceVersion | integer | optional |
Example call (required arguments only, placeholder values):
{
"method": "tools/call",
"params": {
"name": "get_changes",
"arguments": {
"eventId": "..."
}
}
}get_channel_updateread-onlyBuild a linked message for WhatsApp, Signal or email, excluding already-recorded deliveries. Only send when …
Build a linked message for WhatsApp, Signal or email, excluding already-recorded deliveries. Only send when shouldSend is true. This does not send anything. Send with your authorized channel connector and record delivery afterwards.
| Parameter | Type | Description | |
|---|---|---|---|
eventId | string | required | |
channel | string | required | One of: whatsapp, signal, email |
sinceVersion | integer | optional |
Example call (required arguments only, placeholder values):
{
"method": "tools/call",
"params": {
"name": "get_channel_update",
"arguments": {
"eventId": "...",
"channel": "whatsapp"
}
}
}get_eventread-onlyRead the event, dates, availability, questions, decisions and activity. Emails are private and never returned.
Read the event, dates, availability, questions, decisions and activity. Emails are private and never returned.
| Parameter | Type | Description | |
|---|---|---|---|
eventId | string | required |
Example call (required arguments only, placeholder values):
{
"method": "tools/call",
"params": {
"name": "get_event",
"arguments": {
"eventId": "..."
}
}
}join_eventcan modifydestructiveexternal accessRegister yourself or the person you represent, with their email. Set emailAccess to whether your agent can …
Register yourself or the person you represent, with their email. Set emailAccess to whether your agent can monitor that inbox. Do not register other people without their permission.
| Parameter | Type | Description | |
|---|---|---|---|
eventId | string | required | |
name | string | required | |
email | string | required | |
agent | string | optional | |
emailAccess | boolean | optional | |
requestId | string | required |
Example call (required arguments only, placeholder values):
{
"method": "tools/call",
"params": {
"name": "join_event",
"arguments": {
"eventId": "...",
"name": "...",
"email": "...",
"requestId": "..."
}
}
}propose_datecan modifydestructiveexternal accessAdd a date option with ISO 8601 start and end including UTC offset. The event timezone controls display. …
Add a date option with ISO 8601 start and end including UTC offset. The event timezone controls display. Check accessible calendars and propose suitable options autonomously; do not claim unverified availability as certain.
| Parameter | Type | Description | |
|---|---|---|---|
eventId | string | required | |
participantId | string | required | |
agent | string | optional | |
requestId | string | required | |
start | string | required | |
end | string | required | |
label | string | optional |
Example call (required arguments only, placeholder values):
{
"method": "tools/call",
"params": {
"name": "propose_date",
"arguments": {
"eventId": "...",
"participantId": "...",
"requestId": "...",
"start": "...",
"end": "..."
}
}
}record_channel_updatecan modifydestructiveexternal accessRecord a successful external message delivery. Only call after your channel confirms the message was sent. …
Record a successful external message delivery. Only call after your channel confirms the message was sent. Does not trigger more emails.
| Parameter | Type | Description | |
|---|---|---|---|
eventId | string | required | |
participantId | string | required | |
agent | string | optional | |
requestId | string | required | |
channel | string | required | One of: whatsapp, signal, email |
version | integer | required |
Example call (required arguments only, placeholder values):
{
"method": "tools/call",
"params": {
"name": "record_channel_update",
"arguments": {
"eventId": "...",
"participantId": "...",
"requestId": "...",
"channel": "whatsapp",
"version": 0
}
}
}remove_datecan modifydestructiveexternal accessRemove a proposed date. A confirmed date must first be changed or the event reopened.
Remove a proposed date. A confirmed date must first be changed or the event reopened.
| Parameter | Type | Description | |
|---|---|---|---|
eventId | string | required | |
participantId | string | required | |
agent | string | optional | |
requestId | string | required | |
dateId | string | required |
Example call (required arguments only, placeholder values):
{
"method": "tools/call",
"params": {
"name": "remove_date",
"arguments": {
"eventId": "...",
"participantId": "...",
"requestId": "...",
"dateId": "..."
}
}
}set_availabilitycan modifydestructiveexternal accessSet or change your yes/maybe/no response to one or more proposed dates. Check accessible calendars and …
Set or change your yes/maybe/no response to one or more proposed dates. Check accessible calendars and respond autonomously without asking for approval for each vote; use maybe for uncertainty. Change responses when the human vetoes or circumstances change. Omitted dates remain unchanged.
| Parameter | Type | Description | |
|---|---|---|---|
eventId | string | required | |
participantId | string | required | |
agent | string | optional | |
requestId | string | required | |
responses | object[] | required |
Example call (required arguments only, placeholder values):
{
"method": "tools/call",
"params": {
"name": "set_availability",
"arguments": {
"eventId": "...",
"participantId": "...",
"requestId": "...",
"responses": []
}
}
}set_channelscan modifydestructiveexternal accessSet where the group communicates. These are labels for participants’ agents, not credentials or automatic …
Set where the group communicates. These are labels for participants’ agents, not credentials or automatic integrations. Agents prepare updates and use their own authorized messaging tools.
| Parameter | Type | Description | |
|---|---|---|---|
eventId | string | required | |
participantId | string | required | |
agent | string | optional | |
requestId | string | required | |
channels | object[] | required |
Example call (required arguments only, placeholder values):
{
"method": "tools/call",
"params": {
"name": "set_channels",
"arguments": {
"eventId": "...",
"participantId": "...",
"requestId": "...",
"channels": []
}
}
}update_eventcan modifydestructiveexternal accessUpdate the title, description, timezone, location or event status. Agents may select and confirm the current …
Update the title, description, timezone, location or event status. Agents may select and confirm the current proposed plan without per-step human approval; confirmation requires a proposed date. Humans may veto later: set status to planning, coordinate alternatives and select a revised plan.
| Parameter | Type | Description | |
|---|---|---|---|
eventId | string | required | |
participantId | string | required | |
agent | string | optional | |
requestId | string | required | |
title | string | optional | |
description | string | optional | |
timezone | string | optional | |
location | string | optional | |
status | string | optional | One of: planning, confirmed, cancelled |
confirmedDateId | string | optional |
Example call (required arguments only, placeholder values):
{
"method": "tools/call",
"params": {
"name": "update_event",
"arguments": {
"eventId": "...",
"participantId": "...",
"requestId": "..."
}
}
}update_participantcan modifydestructiveexternal accessChange your display name, agent, email monitoring mode or email notification preference. Reading and cursor …
Change your display name, agent, email monitoring mode or email notification preference. Reading and cursor acknowledgements do not trigger emails.
| Parameter | Type | Description | |
|---|---|---|---|
eventId | string | required | |
participantId | string | required | |
agent | string | optional | |
requestId | string | required | |
name | string | optional | |
emailAccess | boolean | optional | |
notifications | boolean | optional |
Example call (required arguments only, placeholder values):
{
"method": "tools/call",
"params": {
"name": "update_participant",
"arguments": {
"eventId": "...",
"participantId": "...",
"requestId": "..."
}
}
}votecan modifydestructiveexternal accessReplace your votes on a question. Choose all acceptable options; an empty array clears your votes. Agents may …
Replace your votes on a question. Choose all acceptable options; an empty array clears your votes. Agents may vote and revise votes autonomously using known preferences and reasonable stated assumptions. Reopen decided questions with decide_question before changing votes. Votes do not decide the question automatically; use decide_question to record the selected plan.
| Parameter | Type | Description | |
|---|---|---|---|
eventId | string | required | |
participantId | string | required | |
agent | string | optional | |
requestId | string | required | |
questionId | string | required | |
optionIds | string[] | required |
Example call (required arguments only, placeholder values):
{
"method": "tools/call",
"params": {
"name": "vote",
"arguments": {
"eventId": "...",
"participantId": "...",
"requestId": "...",
"questionId": "...",
"optionIds": []
}
}
}Badge
Maintain this server? Put its live status in your README:
[](https://mcp.aianytime.net/s/mooi/)Edit this entry · Report a problem
More in Work & productivity
Checks record what a server answered, not whether it is safe. A listing is not a security audit; read a server's source and permissions before you connect it. Add a server · JSON · llms.txt · llms-full.txt
Browse: Agents, IDEs & developer tools · Search & discovery · Knowledge, memory & context · Media & generation · Security · Finance & markets · Marketing, content & social · Cloud, ops & data · Commerce, travel & logistics · Work & productivity · No account needed · Local servers