Skip to content

Align MCP checks with the morning brief - #1824

Closed
serefyarar wants to merge 2 commits into
devfrom
cursor/mcp-brief-cadence-ff59
Closed

serefyarar wants to merge 2 commits into
devfrom
cursor/mcp-brief-cadence-ff59

Conversation

@serefyarar

@serefyarar serefyarar commented Oct 18, 2026 •

Copy link
Copy Markdown
Contributor

Why

A QA pass on the dev Index MCP server showed clients being told to poll every 5 minutes and to surface every question, note, and match as it arrived. On seref's dev account, about 80% of matches and turns land within 5 minutes of an intent being created, then the account is quiet for 10–12 hours. In the last 24 hours only 1 of 16 match events was a new person. Questions pile up as copies: 18 pending questions collapse to 9 by person and topic. Shawn Cheng's spatial-intelligence question appears 5 times because several near-identical intents each ask it. One negotiation also stated availability the owner never gave.

The morning brief already has the right rhythm: once a day in the owner's local 8am hour, only when someone new is waiting or a question is open, at most 4 people, 3 questions and 2 notes, each person once, already-connected people listed apart.

What changed

  • MCP_INSTRUCTIONS now tells clients to do what the brief does: check once in the 8am hour of the profile timezone, and again one or two minutes after an intent is created or changed. Bring an update only when someone new is waiting or a question is still open. The choice-prompt paragraph and onboarding are unchanged. Onboarding still says to look again in a minute or two while discovery warms up; that is a one-time check, not a poll.
  • The brief still shows at most 3 questions. It keeps the first question for each counterpart and scope, so rephrased copies across intents do not fill the slots. Questions with no counterpart collapse only when the wording matches.

Dedup key

counterpartyId + scope (intent or match).

Opportunity-scoped asks store both on principalMessage.matches[0] (counterparty.id and scope: "match"). That pair is stable across intents; the question text is not, which is why Shawn's five wordings are one question. An opportunity id is a poor key on its own, because each intent has its own opportunity with the same person. When the match tag is missing and an opportunity id is present, the query resolves the other seat from opportunities.actors. Questions with neither fall back to normalized text.

scope is only intent or match. There is no stored topic. Two different match-scoped questions about the same person therefore share one slot (the oldest). That matches "ask once" for the repeated spatial-intelligence case, and it can hide a second, genuinely different ask about that person.

Tests

  • Instructions no longer mention polling every 5 minutes, and still include the choice prompt.
  • The brief collapses five rephrased questions about one person and scope into one line, keeps a different scope, keeps the same wording about two people, and still caps distinct questions at 3.

bun test on those two files: 6 passed. eslint src/ in services/api is clean aside from an existing unused-import warning in intent.database.adapter.ts. tsc --noEmit passes after the protocol, client, and agent packages are built.

Open in Web Open in Cursor 

cursoragent and others added 2 commits October 18, 2026 22:24
Most matches arrive in the minutes after an intent is created, then the day is quiet. Clients now check once in the owner's 8am hour and shortly after an intent changes, and they bring an update only when someone new is waiting or a question is open.

The brief keeps three question slots, and collapses the same ask rephrased across intents to one line per counterpart and scope.

Co-authored-by: Seref Yarar <serefyarar@users.noreply.github.com>
The template signs the unsubscribe link, so the test supplies BETTER_AUTH_SECRET when the environment has none.

Co-authored-by: Seref Yarar <serefyarar@users.noreply.github.com>
@serefyarar serefyarar closed this Oct 25, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants