Repository navigation
feat: agents can hold and book several calendars together (MCP 0.2.0, client 0.4.1) - #66
Merged
Merged
Conversation
… client 0.4.1) deltat 0.4.0 holds several resources at once and books them all or none, but no agent could reach it: every MCP tool took one calendar_id or one hold_id. Now the same three tools take lists, and one calendar is the one-item case. - find_slots(calendar_ids) lists only times when every calendar is free. - hold_slot(calendar_ids) holds every calendar for the same time, or none, and returns hold_ids; commit_hold(hold_ids) books every hold or none; release_hold(hold_ids) gives them back. - A refused kit is not a dead end (PRINCIPLES.md 4). deltat offers no alternatives for several calendars, so the MCP asks find_slots' own question: the earliest times in the next week when every calendar is free for the same length, never the time just refused, none held. - SDK: holds.placeMany and holds.commitMany, each one statement and never chunked, since the server makes a statement all-or-nothing and a sequence of them is not. holds.place is placeMany of one. check-published-deps.sh now holds each adapter's client range to the APIs that adapter calls, so the MCP needing client 0.4.1 does not fail the CLI. The MCP's live suite joins the integration job. Verified against deltat 0.4.0: unit 406 pass; live suites 62 pass, including every kit alternative fed back into hold_slot and accepted. Mutation-checked: one statement per hold, alternatives from one calendar only, offering the refused time, and asking the joint question for a single calendar each turn a test red. Claude-Session: https://claude.ai/code/session_01Vaz5XtKxcGVsLe9GeX186M
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
deltat 0.4.0 holds several resources at once and books them all or none (deltat#44). No agent could reach that: every MCP tool took one
calendar_idor onehold_id, and the SDK had only singleplace/commit. The shape follows the decision to widen the existing tools rather than add*_jointones: same three tools, same find, hold, commit story, and one calendar is a one-item list.What agents see
A refused kit is not a dead end (PRINCIPLES.md §4). deltat offers no alternatives for several calendars, because its per-calendar sweep cannot answer a joint question. The MCP asks the question
find_slotsalready answers: the earliest times within the next week when every calendar is free for the same length. It never offers the time just refused, nothing is held, and it uses deltat's own limits (7 days, 3 alternatives).retry_same_timeis false when the refusal was "outside opening hours" (23514), since waiting won't change that.SDK (client 0.4.1)
holds.placeManyandholds.commitManyeach send one statement and are never chunked. The server makes a statement all-or-nothing; a sequence of statements is not.holds.placeis nowplaceManyof one. It sends the same single row as before, so it still works on every deltat.holds.commitkeeps itsUPDATEfor the same reason.Breaking, deliberately (MCP 0.1.0 → 0.2.0)
calendar_ids/hold_ids, andhold_slotreturnshold_ids./mcpis the meeting-requests server: the demo only importsOidcAdapterandVerifiedPrincipalfrom this package, so delt.at's tools are unchanged.Release plumbing
check-published-deps.shnow holds each adapter's client range to the APIs that adapter calls. Without that, the MCP needing client 0.4.1 would fail the CLI, whose^0.4.0is fine.Verified
Locally, against a deltat 0.4.0 build:
hold_slotand accepted, and a parity test showinggetCombinedover one calendar (capacity 1 and 2) answers exactly whatgetdoes, which is whyfind_slotsuses one path.npm publish --dry-runpacks MCP 0.2.0.Mutation-checked. Each of these turns a test red:
Not in this PR
Publishing to npm: client 0.4.1 first, then MCP 0.2.0 and the MCP registry entry, per RELEASING.md.
🤖 Generated with Claude Code
https://claude.ai/code/session_01Vaz5XtKxcGVsLe9GeX186M