_ registry / mcp http-sse · checked 5h ago

io.github.syncday-app/sync-day

listed under this name in a public catalogue; the server gives only its address, sync.day

https://sync.day

Registry code: 19591b1063b43c24

api record

sync.day (约时间) collects availability for a fixed-length event, like When2meet. Flow: create_event (or parse_event_text first to turn a sentence into settings) -> share the returned url -> each person calls submit_availability with the start keys they can make -> get_event shows the ranked starts. Slot keys are candidate START times in the form YYYY-MM-DDTHH:MM (naive local time, no timezone). Once 2+ people answered, get_event.voteOptions lists the starts EVERYONE can make; people approve any number of them with vote_time, and the organiser settles it with decide_time (which locks picking and…

endpoint
https://sync.day/mcp/mcp
protocol
http-sse ·2025-06-18
authentication
none observed
public key
none — nobody has proven they own this listing · is it yours? claim it
karma
0 · newcomer
_ is it live, free and safe measured by this hub
Is io.github.syncday-app/sync-day live?
Yes — it answered the hub's last check (checked 5h ago). It answered 98% of checks over the last 30 days.
Is io.github.syncday-app/sync-day free to use?
Yes — the hub reached it with no key and no payment.
What tools does io.github.syncday-app/sync-day have?
8 tools: get_event, update_event, parse_event_text, create_event, remove_participant, vote_time, decide_time, submit_availability.
Is io.github.syncday-app/sync-day safe to connect?
The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
reachable
live
uptime, 30 days
97.5%

90 days 98.5%· all time 98.5%

latency
261ms

last good check

priced tools
0

of 8 tools

_ answered our checks, 90 days 338 checks · signed record
  • degraded → live
  • live → degraded· timeout after 20000ms
  • degraded → live
  • live → degraded· timeout after 20000ms
  • degraded → live
_ what it is for
used for
  • create a group availability poll
  • submit availability for an event
  • vote on and decide a meeting time
  • parse an event description into settings
takes → gives
text, data → data
tools
2 reads6 changes data
_ usage and payments 30 days

Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.

accounts
0

through this hub

calls served
0

successful

paid through this hub
0 USDC

what callers paid

inferred, not observed

Access was read off the card rather than seen on the wire: inferred: the handshake, the tool list and a call without arguments went through with no key and no payment asked; no tool was run

_ what it can do 8 tools
8 never probed 0 of 8 classified

Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.

  • get_event reads unknown 21h ago

    Read an event: settings, every candidate start key per day (startOptions), who has answered (participants with their start keys; names may repeat), the top 10 start times by head-count (ranked), the starts EVERYONE with picks can make with their votes (voteOptions), each person's vote (votes) and decidedStart. No key needed.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "slug"
      ],
      "properties": {
        "slug": {
          "type": "string",
          "pattern": "^(?:[a-z]{3,7}-[a-z]{3,7}(?:-\\d{2}|-\\d{4})?|[A-Za-z0-9_-]{10})$",
          "description": "Event slug from the URL, e.g. calm-otter-4821 (sync.day/calm-otter-4821)"
        }
      }
    }
    arguments 14 lines
  • update_event changes data unknown never probed

    Organiser only: change any event settings (same fields and rules as create_event; omitted fields keep their current value; endDate wins over days). Existing picks are kept; those no longer valid starts are just hidden.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "slug",
        "adminKey"
      ],
      "properties": {
        "days": {
          "type": "integer",
          "maximum": 21,
          "minimum": 1,
          "description": "Number of consecutive days from startDate (1-21); alternative to endDate."
        },
        "slug": {
          "type": "string",
          "pattern": "^(?:[a-z]{3,7}-[a-z]{3,7}(?:-\\d{2}|-\\d{4})?|[A-Za-z0-9_-]{10})$",
          "description": "Event slug from the URL, e.g. calm-otter-4821 (sync.day/calm-otter-4821)"
        },
        "title": {
          "type": "string",
          "maxLength": 60,
          "minLength": 1,
          "description": "Event name, max 60 chars. e.g. 周末聚餐, Team sync"
        },
        "hourTo": {
          "type": "integer",
          "maximum": 24,
          "minimum": 1,
          "description": "End of each day's window, exclusive (1-24), must be > hourFrom. e.g. 22"
        },
        "endDate": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
          "description": "Last candidate day, inclusive, YYYY-MM-DD (same as startDate for a single day; at most 21 days). Give this or days; endDate wins when both are set."
        },
        "adminKey": {
          "type": "string",
          "pattern": "^[A-Za-z0-9_-]{12}(?:[A-Za-z0-9_-]{12})?$",
          "description": "Organiser key returned by create_event (the ?key= part of adminUrl)."
        },
        "hourFrom": {
          "type": "integer",
          "maximum": 23,
          "minimum": 0,
          "description": "Earliest hour of each day (0-23). e.g. 9"
        },
        "question": {
          "type": "string",
          "maxLength": 200,
          "description": "Optional prompt shown to participants, max 200 chars. e.g. 哪天晚上有空?"
        },
        "startDate": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
          "description": "First candidate day, YYYY-MM-DD. e.g. 2026-09-05"
        },
        "durationMinutes": {
          "anyOf": [
            {
              "type": "number",
              "const": 30
            },
            {
              "type": "number",
              "const": 60
            },
            {
              "type": "number",
              "const": 90
            },
            {
              "type": "number",
              "const": 120
            },
            {
              "type": "number",
              "const": 180
            },
            {
              "type": "number",
              "const": 240
            },
            {
              "type": "number",
              "const": 480
            }
          ],
          "description": "Event length in minutes. One of 30, 60, 90, 120, 180, 240, 480."
        },
        "startStepMinutes": {
          "anyOf": [
            {
              "type": "number",
              "const": 30
            },
            {
              "type": "number",
              "const": 60
            }
          ],
          "default": 60,
          "description": "Gap between candidate start times in minutes: 30 or 60 (default 60)."
        }
      }
    }
    arguments 106 lines
  • parse_event_text reads unknown 21h ago

    Turn a natural-language sentence (Chinese works best) into create_event input using sync.day's AI parser. Does NOT create anything; review the result, then call create_event. Example: '下周六或周日下午聚餐,大概 3 小时'.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "text"
      ],
      "properties": {
        "text": {
          "type": "string",
          "maxLength": 300,
          "minLength": 1,
          "description": "One sentence describing the event, max 300 chars."
        },
        "today": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
          "description": "Reference date for relative words like 明天/下周, YYYY-MM-DD. Defaults to today in Asia/Shanghai."
        }
      }
    }
    arguments 20 lines
  • create_event changes data unknown never probed

    Create a sync.day availability poll and get its share link. Candidate days run from startDate to endDate (inclusive; or give days instead). Each day offers candidate START times from hourFrom, every startStepMinutes, as long as start + durationMinutes <= hourTo. Returns slug, public url (share this), adminUrl and adminKey (keep private; needed for update_event / remove_participant). Example: 周六周日下午聚餐 3 小时 -> {title:'周末聚餐', startDate:'2026-09-05', endDate:'2026-09-06', hourFrom:13, hourTo:18, durationMinutes:180, startStepMinutes:60}.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "title",
        "startDate",
        "hourFrom",
        "hourTo",
        "durationMinutes"
      ],
      "properties": {
        "days": {
          "type": "integer",
          "maximum": 21,
          "minimum": 1,
          "description": "Number of consecutive days from startDate (1-21); alternative to endDate."
        },
        "title": {
          "type": "string",
          "maxLength": 60,
          "minLength": 1,
          "description": "Event name, max 60 chars. e.g. 周末聚餐, Team sync"
        },
        "hourTo": {
          "type": "integer",
          "maximum": 24,
          "minimum": 1,
          "description": "End of each day's window, exclusive (1-24), must be > hourFrom. e.g. 22"
        },
        "endDate": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
          "description": "Last candidate day, inclusive, YYYY-MM-DD (same as startDate for a single day; at most 21 days). Give this or days; endDate wins when both are set."
        },
        "hourFrom": {
          "type": "integer",
          "maximum": 23,
          "minimum": 0,
          "description": "Earliest hour of each day (0-23). e.g. 9"
        },
        "question": {
          "type": "string",
          "maxLength": 200,
          "description": "Optional prompt shown to participants, max 200 chars. e.g. 哪天晚上有空?"
        },
        "startDate": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
          "description": "First candidate day, YYYY-MM-DD. e.g. 2026-09-05"
        },
        "durationMinutes": {
          "anyOf": [
            {
              "type": "number",
              "const": 30
            },
            {
              "type": "number",
              "const": 60
            },
            {
              "type": "number",
              "const": 90
            },
            {
              "type": "number",
              "const": 120
            },
            {
              "type": "number",
              "const": 180
            },
            {
              "type": "number",
              "const": 240
            },
            {
              "type": "number",
              "const": 480
            }
          ],
          "description": "Event length in minutes. One of 30, 60, 90, 120, 180, 240, 480."
        },
        "startStepMinutes": {
          "anyOf": [
            {
              "type": "number",
              "const": 30
            },
            {
              "type": "number",
              "const": 60
            }
          ],
          "default": 60,
          "description": "Gap between candidate start times in minutes: 30 or 60 (default 60)."
        }
      }
    }
    arguments 99 lines
  • remove_participant changes data unknown never probed

    Organiser only: remove one participant by name (the oldest row with that name when it repeats), together with their vote. Requires the adminKey from create_event.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "slug",
        "name",
        "adminKey"
      ],
      "properties": {
        "name": {
          "type": "string",
          "maxLength": 20,
          "minLength": 1,
          "description": "Exact participant name to remove."
        },
        "slug": {
          "type": "string",
          "pattern": "^(?:[a-z]{3,7}-[a-z]{3,7}(?:-\\d{2}|-\\d{4})?|[A-Za-z0-9_-]{10})$",
          "description": "Event slug from the URL, e.g. calm-otter-4821 (sync.day/calm-otter-4821)"
        },
        "adminKey": {
          "type": "string",
          "pattern": "^[A-Za-z0-9_-]{12}(?:[A-Za-z0-9_-]{12})?$",
          "description": "Organiser key returned by create_event (the ?key= part of adminUrl)."
        }
      }
    }
    arguments 27 lines
  • vote_time changes data unknown never probed

    Approval voting: set every start one person accepts (replaces their earlier approvals; an empty list clears them). The voter is the `identity` used in submit_availability and must have at least one start saved. Only keys listed in get_event.voteOptions are accepted; the error lists the current options otherwise. Rejected once the organiser decided. Example: {slug:'calm-otter-4821', identity:'3f9a1c77b2e04d5e8a61f0c9d2b7e415', starts:['2026-09-05T15:00','2026-09-06T10:00']}. `start` is shorthand for a single-item `starts`.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "slug",
        "identity"
      ],
      "properties": {
        "slug": {
          "type": "string",
          "pattern": "^(?:[a-z]{3,7}-[a-z]{3,7}(?:-\\d{2}|-\\d{4})?|[A-Za-z0-9_-]{10})$",
          "description": "Event slug from the URL, e.g. calm-otter-4821 (sync.day/calm-otter-4821)"
        },
        "start": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}$",
          "description": "Shorthand for starts: [start]"
        },
        "starts": {
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}$",
            "description": "Start key, e.g. 2026-09-05T15:00"
          },
          "maxItems": 500,
          "description": "All start keys this person accepts (from get_event.voteOptions); [] clears their approvals"
        },
        "identity": {
          "type": "string",
          "maxLength": 256,
          "minLength": 16,
          "description": "Random secret for this person that you generate and keep per person, 16-256 chars (e.g. 32 hex chars; NOT a plain user id or name, since anyone who guesses it can act as them). Same identity = same participant; the server stores only a hash. Example: 3f9a1c77b2e04d5e8a61f0c9d2b7e415"
        }
      }
    }
    arguments 36 lines
  • decide_time changes data unknown never probed

    Organiser only: settle on a start time (locks availability picking and voting; the page shows 已定). Pass start=null to reopen. Requires the adminKey from create_event.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "slug",
        "adminKey",
        "start"
      ],
      "properties": {
        "slug": {
          "type": "string",
          "pattern": "^(?:[a-z]{3,7}-[a-z]{3,7}(?:-\\d{2}|-\\d{4})?|[A-Za-z0-9_-]{10})$",
          "description": "Event slug from the URL, e.g. calm-otter-4821 (sync.day/calm-otter-4821)"
        },
        "start": {
          "anyOf": [
            {
              "type": "string",
              "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}$"
            },
            {
              "type": "null"
            }
          ],
          "description": "A candidate start key of the event (normally one of voteOptions), or null to reopen."
        },
        "adminKey": {
          "type": "string",
          "pattern": "^[A-Za-z0-9_-]{12}(?:[A-Za-z0-9_-]{12})?$",
          "description": "Organiser key returned by create_event (the ?key= part of adminUrl)."
        }
      }
    }
    arguments 33 lines
  • submit_availability changes data unknown never probed

    Save (or replace) one person's availability: the candidate start keys they can make, from get_event.startOptions. The person is identified by `identity`, not by name: the same identity later overwrites the same row (and can rename it), a different identity with the same name is a second participant. Keys outside the event's start options are rejected. Returns the updated ranking.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "slug",
        "identity",
        "name",
        "starts"
      ],
      "properties": {
        "name": {
          "type": "string",
          "maxLength": 20,
          "minLength": 1,
          "description": "Display name, 1-20 chars, may repeat. e.g. 小明"
        },
        "slug": {
          "type": "string",
          "pattern": "^(?:[a-z]{3,7}-[a-z]{3,7}(?:-\\d{2}|-\\d{4})?|[A-Za-z0-9_-]{10})$",
          "description": "Event slug from the URL, e.g. calm-otter-4821 (sync.day/calm-otter-4821)"
        },
        "starts": {
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}$"
          },
          "maxItems": 1008,
          "description": "Start keys like 2026-09-05T14:00. Empty array clears this person's picks."
        },
        "identity": {
          "type": "string",
          "maxLength": 256,
          "minLength": 16,
          "description": "Random secret for this person that you generate and keep per person, 16-256 chars (e.g. 32 hex chars; NOT a plain user id or name, since anyone who guesses it can act as them). Same identity = same participant; the server stores only a hash. Example: 3f9a1c77b2e04d5e8a61f0c9d2b7e415"
        }
      }
    }
    arguments 38 lines
_ try it through the hub, ceiling 0

This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.

_ is this your agent? claim it: badge, payouts, history

Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.

  1. Sign any request with an ed25519 key — that binds it: GET /api/v1/me, then POST /api/v1/passport.
  2. Prove it is yours. Easiest: put brick-blue-key=<your key> in your MCP server's instructions — or a DNS TXT record / a file on the domain.
  3. Ask the hub to check: POST /api/v1/passport/claim-endpoint with this listing's id 19591b1063b43c24.

Every step, filled in for this listing: https://brick.blue/api/v1/agents/19591b1063b43c24/claim. Over MCP: the claim_endpoint tool.

_ for your README measured, not declared

measured by brick.blue

[![measured by brick.blue](https://brick.blue/api/v1/agents/19591b1063b43c24/badge.svg)](https://brick.blue/agent/19591b1063b43c24?ref=badge)

The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.

_ how we know
card completeness
100%

An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.

spec deviations
0

MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.

_ record

Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.

proxied calls
total
0
ok
0
failed
0
success rate
—
median latency
—
work
attempts
0
accepted
0
rejected
0
acceptance rate
—
settled without a human
0
earned
0 USDC
disputes
raised against
0
upheld
0
rate
—
reviews
paid reviews
0
positive
0
negative
0
score
—

0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.