Skip to main content
Glama

Local DevLog MCP

Status: Milestone 4.1 implemented. A macOS-first, open-source MCP that records Git push attempts, stores one versioned human-approved draft per local work date, and explicitly publishes one daily Work Log and one all-day Calendar event.

What works

  • Multiple local Git repositories can be registered with pnpm run setup.

  • A fail-open pre-push hook records push attempts without requiring the MCP server to be running.

  • JSON event storage uses deterministic event IDs, a writer lock, and atomic replacement.

  • get_daily_activity returns dated commit metadata and current remote-state verification.

  • Daily drafts can be saved, listed, edited, rejected, reopened, and explicitly approved through MCP Tools.

  • Draft revisions and approval evidence are stored atomically in local JSON.

  • MCP Apps-capable hosts receive an interactive draft review UI; other hosts receive the same structured JSON plus text fallback.

  • Approval uses native form Elicitation when the host supports it, with an exact confirmation phrase fallback otherwise.

  • Notion Database/Data Source configuration can be validated read-only against API version 2026-03-11.

  • All approved Work Items for one workDate + timezone are combined into one Notion Work Log; explicitly selected Next Actions become Tasks.

  • Notion publication uses a deterministic daily Local ID and per-item local state for duplicate prevention and partial-failure retry.

  • Approved drafts can be previewed and explicitly published as all-day Apple Calendar events through a Swift EventKit bridge.

  • Notion and Calendar publication states are independent; a failure in one target does not erase the other target's success.

  • Calendar publication uses a deterministic marker plus the EventKit identifier for duplicate prevention and crash recovery.

Related MCP server: commit-check-mcp

Requirements

macOS 14 or newer, Node.js >=20, pnpm, Git, Xcode Command Line Tools, and Apple Calendar full-access permission.

Start

pnpm install
pnpm typecheck
pnpm test
pnpm build
pnpm run setup -- add /absolute/path/to/repository
pnpm start

The MCP server uses stdio and is normally launched by a compatible MCP client rather than run continuously. Example client command after build: node /absolute/path/to/local-devlog-mcp/dist/index.js.

Connect from Codex

Build the server, then register it with Codex using the absolute path to this checkout:

pnpm build
codex mcp add local-devlog -- node /absolute/path/to/local-devlog-mcp/dist/index.js
codex mcp list

Restart Codex after registration. In the Codex terminal UI, run /mcp to confirm that local-devlog is connected, then ask Codex to call the ping tool. A healthy server returns pong.

Codex CLI, the Codex IDE extension, and the ChatGPT desktop app share MCP configuration on the same host. For project-scoped configuration, trusted projects can instead add the following to .codex/config.toml:

[mcp_servers.local-devlog]
command = "node"
args = ["/absolute/path/to/local-devlog-mcp/dist/index.js"]
cwd = "/absolute/path/to/local-devlog-mcp"

The configured path points to build output, so run pnpm build again after changing the server source.

Native MCP form Elicitation is preferred for draft approval. With a Codex version that exposes the granular setting, ensure Elicitation is not disabled in ~/.codex/config.toml:

approval_policy.granular.mcp_elicitations = true

See the official Codex App Server documentation and configuration reference. Host support varies: when an MCP client does not render MCP Apps, the draft Tools still work through structured JSON; when it does not support form Elicitation, approval requires the exact phrase returned by the failed approval attempt.

Daily draft workflow

  1. Call get_daily_activity with a local date and use only its Git evidence to prepare summary, workItems, and nextActions.

  2. Pass the returned sourceFingerprint and referenced event IDs to save_daily_draft. Saving never approves a draft.

  3. Review with get_daily_draft or list_daily_drafts. Use update_daily_draft with the current expectedVersion; stale edits return VERSION_CONFLICT.

  4. Reject or reopen through update_daily_draft using REJECTED or PENDING.

  5. Call approve_daily_draft for one exact draftId and version. Native Elicitation requires a human to accept and type the displayed phrase.

The available draft Tools are save_daily_draft, get_daily_draft, list_daily_drafts, update_daily_draft, and approve_daily_draft. Approved drafts are immutable. If new Git activity appears between saving and approval, approval remains possible but records SOURCE_CHANGED_AFTER_DRAFT.

The interactive view is served as a self-contained ui:// resource following the MCP Apps specification. It has no external network or asset permissions. Approval always goes back through the server Tool; clicking an in-app button alone is not approval.

Fallback confirmation is weaker than native Elicitation because an AI client can reproduce a displayed phrase. The persisted approvalMethod distinguishes MCP_ELICITATION from EXPLICIT_CONFIRMATION_FALLBACK; review that audit field before future publication.

Notion setup and publication

Keep the integration token only in the ignored .env file or the process environment:

NOTION_TOKEN=secret_...
NOTION_TASKS_DATABASE_ID=<parent-database-id>
NOTION_TASKS_DATA_SOURCE_ID=<tasks-data-source-id>
NOTION_WORKLOGS_DATABASE_ID=<parent-database-id>
NOTION_WORKLOGS_DATA_SOURCE_ID=<work-logs-data-source-id>

For compatibility, an existing *_DATABASE_ID value that is actually a Data Source ID is detected read-only and reported as a warning. The application never rewrites .env or modifies a Notion schema.

Required Tasks properties:

Property

Type

Required option

Name

title

—

Due Date

date

—

Local Id

rich_text

—

Status

select

TODO

Priority

select

MEDIUM

Required Work Logs properties:

Property

Type

Name

title

Date

date

Repository

url

Summary

rich_text

Local ID

rich_text

Run the read-only check with pnpm notion:validate. It authenticates, resolves Database and Data Source IDs, and compares property names, types, and required select options. It never creates or updates a page.

Publication is deliberately two-phase:

  1. Call preview_notion_publication with an approved draftId, exact approved version, and zero-based selectedNextActionIndexes.

  2. Review the Work Logs, selected Tasks, and previewFingerprint returned by the preview.

  3. Call publish_to_notion with the same selection and fingerprint. Native Elicitation or the exact returned fallback phrase is required before any write.

  4. Call get_notion_publication_status to inspect each item and retry failures safely.

Approval alone never publishes. One approved Daily Draft becomes one Work Log containing Repository-grouped Work Items, while only explicitly selected Next Actions become Tasks. With multiple repositories, their URLs are written in the page body instead of forcing several values into the single Repository URL property. The local status is stored in notion-publications.json; if a remote create succeeds before local persistence, retry queries the daily Local ID before creating anything else.

The publication identity is workDate + timezone, not draftId. A different Draft cannot create another Work Log for an already-published daily identity and receives DAILY_PUBLICATION_CONFLICT. Re-publishing the same Draft skips the existing Work Log while still allowing newly selected Tasks. Legacy single-page publications are adopted locally without changing the Notion page; ambiguous legacy days with multiple pages are reported as conflicts.

Apple Calendar setup and publication

The Calendar bridge requests full access because selecting a named Calendar and safely finding an existing event require read access as well as write access. Local DevLog never creates, renames, or deletes a Calendar.

Build the bridge, list writable Calendars, and store one exact EventKit identifier:

pnpm build
pnpm run setup -- calendar list
pnpm run setup -- calendar set <calendar-identifier>

calendar list is the explicit permission-request step. macOS should show a full-access prompt for Local DevLog Calendar Bridge; depending on how the MCP host was launched, System Settings may associate the request with the host application or terminal. If access was denied, enable it under System Settings → Privacy & Security → Calendars, then run the command again. Use pnpm run setup -- calendar clear to remove only the local selection; existing events are never changed.

Calendar publication is also two-phase:

  1. Call validate_calendar_connection without requestPermission to inspect current permission and configuration. Set requestPermission: true only when the user explicitly wants the macOS prompt.

  2. Call preview_calendar_publication with an approved draftId and exact approved version.

  3. Review the target Calendar, all-day event title/body, Notion links, and previewFingerprint.

  4. Call publish_to_calendar with the same fingerprint. Native Elicitation or the exact returned fallback phrase is required before EventKit writes.

  5. Call get_calendar_publication_status to verify the local record and current EventKit event.

The event date uses the Draft's configured IANA timezone; Git timestamps are never interpreted as work start or end times. The body contains the summary, repository work, next actions, Draft/version marker, and any already-synced Notion Work Log links.

State is stored in calendar-publications.json, separately from Notion. If EventKit succeeds before local state can be saved, retry finds the event by its stable Local DevLog marker. If the user deletes or moves the event, the status reports MISSING or MOVED; a newly confirmed publication creates a replacement in the configured Calendar without modifying the moved event.

Calendar uses the same workDate + timezone daily identity as Notion. A different Draft cannot create a second event for that identity. Existing legacy events remain unchanged and are recognized through their stored EventKit identifier and marker.

If new Git activity appears after approval, publication previews and status responses report sourceChangedAfterApproval. MVP publication never edits an already-published Work Log or Calendar event; changing published content requires a future explicit amendment workflow.

The read-only live check is opt-in:

pnpm test:calendar:integration

The write integration test additionally requires CALENDAR_TEST_DRAFT_ID, CALENDAR_TEST_DRAFT_VERSION, and the exact CALENDAR_PUBLICATION_CONFIRMATION returned by the preview. Do not run pnpm test:calendar:write without reviewing that preview.

Repository setup

Configuration, events, drafts, and publication state are stored outside this checkout at ~/Library/Application Support/local-devlog-mcp/. The Notion token remains in .env or the process environment and is never copied into local JSON. No diff content is stored.

# Build first because installed hooks call dist/git/hook-runner.js.
pnpm build

# Add one or more repositories and install their hooks.
pnpm run setup -- add ~/Projects/one ~/Projects/two

# Show registered repositories and the active data directory.
pnpm run setup -- list

# Change the calendar timezone used by get_daily_activity.
pnpm run setup -- timezone America/Los_Angeles

# Select the only Calendar Local DevLog may write to.
pnpm run setup -- calendar list
pnpm run setup -- calendar set <calendar-identifier>

# Remove only the matching Local DevLog hook and registration.
pnpm run setup -- remove ~/Projects/one

Use pnpm run setup, including run: pnpm 10 reserves pnpm setup for configuring pnpm itself and does not dispatch the project script.

For isolated testing, LOCAL_DEVLOG_DATA_DIR overrides the data directory. config.example.json documents the persisted configuration version but repository entries should be created through pnpm run setup.

Security and Git behavior

pre-push executes before a push succeeds. Captured events are attempts, not proof of remote publication. REMOTE_MATCH means only that the requested commit or deletion agrees with the currently observed remote state; it does not prove which command produced that state.

Hook collection failures print a diagnostic to stderr and allow the push to continue. Setup refuses to overwrite an existing pre-push hook because automatically combining arbitrary hook scripts can change stdin and exit-code behavior. Removal checks the exact installed hook hash and never deletes a modified or third-party hook. Repository-local core.hooksPath settings are respected; external paths are refused because a shared hook cannot safely embed one repository identity.

Manual macOS check

  1. Run pnpm build, then register a temporary repository with pnpm run setup -- add <path>.

  2. Push to a local bare repository while the MCP server is stopped.

  3. Confirm events.json appears under ~/Library/Application Support/local-devlog-mcp/.

  4. Start Codex, call get_daily_activity for the local date, and confirm the event is labeled as a push attempt.

  5. Run pnpm run setup -- remove <path> and confirm unrelated hook files are untouched.

Roadmap

See docs/roadmap.md. Slack and KakaoTalk are future ideas only (docs/future-extensions.md).

License

MIT (see LICENSE).

Available Tools

15 tools
approve_daily_draftApprove daily draftA
DestructiveIdempotent

Approve one exact persisted draft version after explicit human confirmation. This does not publish externally.

NameRequiredDescriptionDefault
draftIdYes
versionYes
confirmationNo

Output Schema

NameRequiredDescription
okYes
codeNo
draftNo
messageNo
revisionsNo

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly=false, idempotent=true and destructive=true, so the safety profile is partially covered. The description adds real value by clarifying that approval has no external effect, but it never explains why the call is flagged destructive, what state becomes immutable after approval, or whether it can be undone — the most consequential unknowns for a destructive, idempotent mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with no filler. The operation and the key scope constraint lead; the non-effect clarification follows immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value detail is fairly excused, and the human-confirmation gate is stated. But for a destructive, idempotent approval step the description leaves the actual state transition, error conditions (stale version, unconfirmed draft), and consequence of the destructiveHint unexplained — more is warranted given the mutation risk.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry the burden and it only partly does: 'one exact persisted draft version' maps loosely to draftId plus version, and 'explicit human confirmation' names the third parameter's intent. It adds no detail on the UUID format, the version>0 constraint, or what string the confirmation field expects (e.g., an echo of the version).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Approve), a precise resource (one exact persisted draft version), and a scope qualifier ('exact persisted version') that separates it from save_daily_draft/update_daily_draft. The closing clause 'does not publish externally' pins down what the tool is NOT, distinguishing it from publish_to_notion and publish_to_calendar in the sibling list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear precondition ('after explicit human confirmation') and an explicit exclusion ('does not publish externally'), which effectively routes the agent away from the publication siblings. It stops short of naming the specific alternative to use when the intent is to publish, or saying when approval should be withheld.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_calendar_publication_statusC
Read-only

Read local Apple Calendar publication state and verify the event when Calendar access is available.

NameRequiredDescriptionDefault
draftIdYes
versionYes

Output Schema

NameRequiredDescription
okYes
codeNo
resultNo
messageNo

TDQS

C2.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds that it reads local Apple Calendar state and conditionally verifies the event, but it does not explain failure behavior when Calendar access is unavailable or what verification entails.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a single front-loaded sentence with no filler. The phrase 'verify the event when Calendar access is available' slightly muddles the structure by combining status reading with an undefined verification action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, but the definition still leaves key gaps. With two required undocumented parameters and many sibling publication tools, the agent lacks enough information to confidently route and invoke this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and both required parameters, draftId and version, are undocumented in the description. The description gives no meaning for either parameter, including what 'version' refers to in the publication workflow.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb, 'Read,' and a specific resource, 'local Apple Calendar publication state,' which distinguishes it from the Notion publication status sibling. The added 'verify the event' phrase is somewhat vague, but the core purpose is clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives only a conditional availability note, 'when Calendar access is available,' which is not a usage guideline. It does not explain when to use this instead of get_notion_publication_status, preview_calendar_publication, or publish_to_calendar.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_daily_activityA
Read-only

Read Git pre-push attempts for a local calendar date. Results are attempts, not proof that pushes succeeded.

NameRequiredDescriptionDefault
dateYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so safety is covered. The description goes beyond that with a genuinely useful caveat: results are attempts, not proof that pushes succeeded, which prevents the agent from treating counts as success metrics. It does not mention pagination, volume limits, or timezone behavior of the returned data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with purpose and immediately followed by the semantic caveat. Nothing is redundant or padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description carries the burden of return-value semantics, and it does address that in one line (attempts, not successes). For a one-parameter read tool this is nearly sufficient; the missing piece is the accepted date string format and whether results include per-push detail or only aggregates.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the single parameter is documented only as type string. The description adds real meaning by specifying 'local calendar date' (i.e., not UTC, not a range), but gives no expected format or example value, so an agent still has to guess the accepted representation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb ('Read') and resource ('Git pre-push attempts') with scope ('for a local calendar date'). It is unmistakably distinct from the draft/Notion/calendar publication siblings, which all concern publishing workflows rather than local Git activity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to prefer this tool over a sibling, no prerequisites, and no exclusions. The purpose sentence implies the usage context, but no alternative or condition is ever named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_daily_draftGet daily draftB
Read-only

Read a daily draft and all of its immutable revisions.

NameRequiredDescriptionDefault
draftIdYes

Output Schema

NameRequiredDescription
okYes
codeNo
draftNo
messageNo
revisionsNo

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true. The description adds useful context that revisions are immutable and all are returned, but it does not disclose error behavior, lookup failure cases, or authorization requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single focused sentence with the core purpose front-loaded. Every word contributes to stating what is read and what is returned.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema exists, so return values need not be explained. Still, for a one-parameter tool with zero schema description coverage, the description should clarify what draftId refers to and what happens if it is invalid or missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries full responsibility for explaining the single draftId parameter. It never mentions draftId, its UUID format, or how it is used, leaving the schema name as the only clue.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Read') and resource ('daily draft') and adds that all immutable revisions are included, which helps distinguish it from list_daily_drafts. However, it does not explicitly contrast with sibling retrieval tools like get_daily_activity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus list_daily_drafts, get_daily_activity, or save_daily_draft. Usage is only implied by the verb 'Read' and the noun 'daily draft'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_notion_publication_statusB
Read-only

Read local per-item Notion publication and retry status for one draft version.

NameRequiredDescriptionDefault
draftIdYes
versionYes

Output Schema

NameRequiredDescription
okYes
codeNo
resultNo
messageNo

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already establishes that this is a safe read operation. The description adds that the status is 'local' and includes 'retry status,' which is useful context beyond annotations, but it does not explain whether the local status may be stale or what retry semantics mean.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted words. Every phrase contributes to identifying the resource and scope.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Although an output schema exists, the 0% parameter schema coverage leaves the meaning of draftId and version ambiguous. The description also does not clarify how this local status relates to the publish/preview tools, so an agent has gaps to resolve before calling it confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must explain the parameters. It only vaguely refers to 'one draft version' and does not clarify whether 'version' means a draft version number or a publication retry attempt, nor does it explain the draftId format or constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Read') and a specific resource ('local per-item Notion publication and retry status') scoped to one draft version. It implicitly distinguishes itself from publish_to_notion and preview_notion_publication, though it does not name sibling tools explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit guidance on when to use this tool versus alternatives such as preview_notion_publication or get_calendar_publication_status. The phrase 'for one draft version' gives minimal context but does not clarify prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_daily_draftsList daily draftsB
Read-only

List current daily draft versions, optionally filtered by date, timezone, or status.

NameRequiredDescriptionDefault
statusNo
timezoneNo
workDateNo

Output Schema

NameRequiredDescription
okYes
codeNo
draftsNo
messageNo

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true already tells the agent this is a safe read, so the description's burden is lower. It adds a useful scope word ('current' versions) but says nothing about result ordering, volume, or pagination behavior for what is implicitly a list endpoint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One front-loaded sentence with the resource first and the optional filters after; nothing is wasted. Its brevity is close to under-specification rather than over-verbosity, so it isn't penalized heavily here.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values needn't be described. But with 0% parameter description coverage and no annotations beyond readOnlyHint, the definition should still specify date/timezone formats or default listing scope for an agent to call it confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description carries the burden, and it does name all three filters (date, timezone, status) mapping to workDate, timezone, and status. It stops short of giving the expected format for workDate or timezone strings, so the agent must guess syntax despite knowing each filter's meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (current daily draft versions), and the plural 'versions' implies a collection rather than a single record, which distinguishes it from the sibling get_daily_draft. No sibling is named explicitly, so the differentiation is inferred rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'optionally filtered by' signals all filters are optional and that this is a browsing tool, which implies usage. However, it never says when to use this versus get_daily_draft for a single draft, nor any prerequisite such as needing a configured daily-draft source.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pingB
Read-only

Check MCP connectivity

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
messageYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true already tells the agent this is a safe, side-effect-free operation, so the description carries a lighter burden. It adds nothing beyond that — no mention of latency, failure semantics, or what a failed check implies — but nothing contradicts the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single three-word phrase with zero waste, front-loading the verb and target. Nothing could be trimmed without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values needn't be explained, and a zero-param health check is a simple tool. Still, the description leaves open what a 'check' verifies and how it differs from the sibling connection validators, which an agent would need in order to choose correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. No parameter-level context is needed or missing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Check MCP connectivity" names a specific verb (check) and resource (MCP connectivity), and the word "MCP" implicitly scopes it away from the Notion/Calendar connection validators in the sibling list. It is clear but does not explicitly state that it exercises the MCP server itself rather than an upstream integration.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to call this versus validate_notion_connection or validate_calendar_connection, nor any note about when a health check is appropriate (start of session, after errors, etc.). The only signal is the word "connectivity," which the agent must infer usage from.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

preview_calendar_publicationA
Read-only

Preview one all-day Apple Calendar event for an exact approved draft version. This performs no Calendar write.

NameRequiredDescriptionDefault
draftIdYes
versionYes

Output Schema

NameRequiredDescription
okYes
codeNo
resultNo
messageNo

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true and openWorldHint=true, so the no-write behavior is known. The description reinforces no Calendar write and adds scope details ('one all-day Apple Calendar event', 'exact approved draft version'), but does not add auth, rate-limit, or other operational context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the core purpose and followed by the key safety constraint. There is no wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter preview tool with an output schema and read-only annotations, the description covers the essential purpose and approved-draft requirement. Parameter meaning remains thin, but return values and safety are handled by structured fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate but only vaguely ties the parameters to 'exact approved draft version'. It does not explain that draftId is a UUID or that version must be a positive integer.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Preview'), resource ('one all-day Apple Calendar event'), and scope ('exact approved draft version'). It clearly distinguishes this from write-oriented siblings such as publish_to_calendar.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context for use: previewing a specific approved draft version without performing a Calendar write. It does not explicitly name alternatives like publish_to_calendar or preview_notion_publication, so it stops short of full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

preview_notion_publicationB
Read-only

Preview Work Logs and explicitly selected Tasks for one approved draft version. This performs no Notion writes.

NameRequiredDescriptionDefault
draftIdYes
versionYes
selectedNextActionIndexesYes

Output Schema

NameRequiredDescription
okYes
codeNo
resultNo
messageNo

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true; 'This performs no Notion writes' restates the read-only guarantee rather than adding new context. Nothing is said about idempotency, size/rate limits on the selection, or what the preview returns, though the existing output schema carries the return shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with the operation and its scope front-loaded and the safety caveat last; every clause carries information and there is no padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, and the read-only nature is covered by annotations. However, with three required parameters at 0% schema coverage, the description is too thin to let an agent correctly construct selectedNextActionIndexes or understand the approved-draft prerequisite.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry all parameter meaning, and it only loosely maps 'one approved draft version' to draftId/version and 'explicitly selected Tasks' to selectedNextActionIndexes. It never clarifies what the indexes index into, whether they are 0-based, or the 100-item cap, and the wording 'Tasks' versus the parameter name 'NextActionIndexes' leaves an ambiguity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (preview) and scoped resource (Work Logs plus explicitly selected Tasks for one approved draft version), and the closing clause implicitly contrasts it with a publishing operation. It does not name the sibling publish_to_notion outright, so the differentiation is inferential rather than explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'one approved draft version' implies a prerequisite (the draft must be approved) and the word 'Preview' implies a pre-publication check, but no alternative tool is named and there is no explicit guidance on when to choose this over publish_to_notion or get_notion_publication_status.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

publish_to_calendarA
DestructiveIdempotent

Publish an exact, previously previewed approved draft version to Apple Calendar after explicit user confirmation.

NameRequiredDescriptionDefault
draftIdYes
versionYes
confirmationNo
previewFingerprintYes

Output Schema

NameRequiredDescription
okYes
codeNo
resultNo
messageNo

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare this as non-read-only, open-world, idempotent, and destructive. The description adds useful context about explicit user confirmation and publishing an exact approved version, but it does not explain what destructive effect may occur, whether re-publishing overwrites or duplicates calendar entries, or how confirmation is verified.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a single front-loaded sentence with no wasted text. Every phrase contributes to scoping or prerequisites.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core workflow gate (previewed, approved, explicitly confirmed) and the tool has explicit annotations plus an output schema. However, for a destructive external publication tool with 0% parameter description coverage, it leaves important operational details undocumented, especially how to obtain the previewFingerprint and what confirmation should contain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for four undocumented parameters. It loosely implies version, preview fingerprint, and confirmation through phrases like 'exact version', 'previously previewed', and 'explicit user confirmation', but it gives no concrete semantics for draftId, version, previewFingerprint, or confirmation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (publish), resource (Apple Calendar), and scope (exact, previously previewed, approved draft version). It implicitly distinguishes this from publish_to_notion and from the preview/status siblings, so an agent can identify the operation without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly states the prerequisite workflow: the draft must have been previously previewed and approved, and publishing requires explicit user confirmation. It does not explicitly name preview_calendar_publication or state when-not-to-use alternatives, but the conditions for use are clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

publish_to_notionB
DestructiveIdempotent

Publish an exact, previously previewed approved draft version after explicit user confirmation.

NameRequiredDescriptionDefault
draftIdYes
versionYes
confirmationNo
previewFingerprintYes
selectedNextActionIndexesYes

Output Schema

NameRequiredDescription
okYes
codeNo
resultNo
messageNo

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true and openWorldHint=true, so the safety profile is covered. The description adds genuinely useful preconditions (prior preview, approval, explicit confirmation) beyond annotations, but says nothing about what happens on a fingerprint mismatch, what gets overwritten, or the external side effect on Notion despite openWorld=true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence with zero waste; the key constraint (exact, previously previewed, approved, confirmed) is front-loaded and scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, open-world publish with 5 undocumented parameters and no schema descriptions, the description is far too thin — an agent cannot construct the arguments or anticipate mismatch/failure behavior. The output schema being present helps with return values, but not with the invocation-critical gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 5 parameters, so the description carries the full burden and largely fails: 'previously previewed' hints at previewFingerprint, but draftId, version, selectedNextActionIndexes, and confirmation are entirely undefined. Nothing explains that version pins an exact draft revision or what the fingerprint is validated against.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (publish) and resource (a previously previewed, approved draft version) plus the notable scope constraint that it must be exact and previously previewed. It implicitly distinguishes itself from preview_notion_publication by requiring a prior preview, but never names the siblings it contrasts with (preview_*, publish_to_calendar).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clear preconditions — the draft must already be previewed and approved, and explicit user confirmation is required — which effectively routes the agent away from calling this before preview/approve. It stops short of naming the specific prerequisite sibling tools (preview_notion_publication, approve_daily_draft) or stating what to do if those steps were skipped.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

save_daily_draftSave daily draftB
Idempotent

Persist an AI-proposed daily draft. This does not approve or publish it.

NameRequiredDescriptionDefault
summaryYes
timezoneYes
workDateYes
workItemsYes
nextActionsYes
sourceEventIdsYes
sourceFingerprintYes

Output Schema

NameRequiredDescription
okYes
codeNo
draftNo
messageNo
revisionsNo

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful scoping by clarifying no approval or publication occurs, but says nothing about whether an existing draft for the same workDate is overwritten, how sourceFingerprint affects conflict handling, or what permissions are required.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the scope-boundary claim front-loaded and no filler. Efficient, though the brevity comes at the cost of the parameter explanation noted elsewhere rather than being an independent flaw.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-required-parameter write tool with 0% schema coverage, the description leaves too much for the agent to infer: draft identity key, overwrite behavior, fingerprint purpose. The presence of an output schema excuses it from explaining return values, but not from explaining inputs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 7 required parameters, so the description must carry the meaning and it carries none. Semantically loaded fields like timezone, workDate format, sourceFingerprint (presumably a conflict/staleness token) and the sourceEventIds provenance link are left entirely unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (persist) and resource (daily draft), plus the qualifying detail that the draft is AI-proposed. Together with the explicit 'does not approve or publish' clause, it separates itself from approve_daily_draft and the publish tools, though the relationship to save vs. update_daily_draft is left unaddressed.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description excludes two adjacent operations (approval, publication), which is real guidance. But it never says when to use this versus update_daily_draft or get_daily_draft, and the save/update boundary is the most likely selection error among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_daily_draftUpdate daily draftC

Create a new immutable revision after checking the current version. Use REJECTED to reject and PENDING to edit or reopen.

NameRequiredDescriptionDefault
statusYes
draftIdYes
summaryYes
workItemsYes
nextActionsYes
sourceEventIdsYes
expectedVersionYes
sourceFingerprintYes

Output Schema

NameRequiredDescription
okYes
codeNo
draftNo
messageNo
revisionsNo

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=false, destructiveHint=false, so the safety profile is covered. The description adds genuinely useful behavior beyond that: the write produces an immutable revision (history is preserved) and is gated on the current version. It does not say what happens on a version mismatch (error vs. retry), nor whether the prior revision is superseded.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the core action front-loaded and zero filler. The compression slightly costs clarity — 'checking the current version' is a vague way to describe optimistic-concurrency enforcement — but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-required-parameter mutation with 0% schema coverage and a conflict-sensitive version parameter, the description is far too thin: no conflict/failure behavior, no explanation of the provenance fields, no routing against the five sibling draft tools. The output schema being present removes the need to describe returns, but the input and behavioral gaps dominate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 8 required parameters, and the description compensates for only one: the status enum, where it explains REJECTED vs. PENDING semantics. draftId, expectedVersion, sourceEventIds, sourceFingerprint, summary, workItems, and nextActions carry no meaning in the description; provenance fields like sourceFingerprint are left entirely unexplained by both schema and text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a concrete action (create a new immutable revision) and explains the version-check precondition, which clarifies that this is an append-only revision of a draft rather than an in-place edit. It never names a sibling, so the agent cannot tell from the description alone how this differs from save_daily_draft or approve_daily_draft.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'After checking the current version' hints at a read-then-write flow, but there is no explicit when-to-use guidance and no exclusion relative to save_daily_draft, approve_daily_draft, or list/get_daily_draft. The only guidance given ('Use REJECTED to reject and PENDING to edit or reopen') is about the status value, not about tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_calendar_connectionA
Idempotent

Inspect Apple Calendar permission and configured target. Set requestPermission only when the user wants the macOS full-access prompt.

NameRequiredDescriptionDefault
requestPermissionNo

Output Schema

NameRequiredDescription
okYes
codeNo
resultNo
messageNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false, which looks surprising for an 'Inspect' tool until the description explains that setting requestPermission raises the macOS full-access prompt — a genuine system-level side effect an agent could not infer. It stops short of saying what happens on denial or non-interactive contexts.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, the action front-loaded and the conditional parameter guidance second. Nothing is redundant with the schema or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and the one parameter is covered. The remaining gap is that 'configured target' is never defined — an agent does not know what target is being validated or what a failing result means.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry the single parameter, and it does: requestPermission is tied to the macOS full-access prompt and implicitly gated ('only when the user wants'). The default of false comes from the schema rather than the text, and the exact prompt behavior is not spelled out further.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Inspect) and resource (Apple Calendar permission and configured target), which clearly separates it from validate_notion_connection. It does not explicitly name siblings or say when to prefer it over publish_to_calendar, but the scope is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The second sentence gives a conditional rule for one parameter ('only when the user wants the macOS full-access prompt'), which is strong guidance. However, there is no statement of when to call this tool at all versus the publication siblings, and no note about running it before publish_to_calendar.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_notion_connectionA
Read-only

Read Notion authentication, Database, Data Source, and property schemas without modifying Notion.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
okYes
codeNo
resultNo
messageNo

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered structurally; 'without modifying Notion' largely restates readOnlyHint. The description adds no information about authentication failure modes, error reporting, or rate limits — relevant for a tool whose job is validating an external connection.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no filler. It is efficient, though the four-item resource list is slightly dense and the read-only qualifier could have been folded into a clearer purpose statement.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With zero parameters, full annotation coverage, and an output schema that presumably carries the returned schema/auth details, the description is close to sufficient. It is only missing the failure/validation semantics that the tool name promises.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate. Baseline 4 applies; the description does not need to compensate for any schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Read) and enumerates the exact resources: authentication, Database, Data Source, and property schemas. An agent can distinguish it from publish_to_notion or get_notion_publication_status, though the description never explicitly says it 'validates the connection' as the name implies — the link between reading schemas and validation is left implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit 'use this when...' clause and no sibling is named as an alternative. Usage is only implied by the trailing 'without modifying Notion', which suggests a pre-flight/read-only check, and by the parallel validate_calendar_connection sibling. An agent must infer the context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 15 tool updatesv0.4.1
    • First observedapprove_daily_draft
    • First observedget_calendar_publication_status
    • First observedget_daily_activity
    • First observedget_daily_draft
    • First observedget_notion_publication_status
    • First observedlist_daily_drafts
    • First observedping
    • First observedpreview_calendar_publication
    • First observedpreview_notion_publication
    • First observedpublish_to_calendar
    • First observedpublish_to_notion
    • First observedsave_daily_draft
    • First observedupdate_daily_draft
    • First observedvalidate_calendar_connection
    • First observedvalidate_notion_connection

TDQS

A3.5/5.0

Scored across 15 tools

Disambiguation5/5

Each tool targets a distinct resource+action, and the Notion and Calendar tracks are cleanly mirrored (validate, preview, publish, status) so they never collide. The only potentially overlapping group — save_daily_draft, update_daily_draft, approve_daily_draft — is sharply differentiated by descriptions (persist vs. new immutable revision vs. approve exact version). get_daily_draft vs. list_daily_drafts is the standard singular/plural split and reads clearly.

Naming Consistency4/5

Nearly all tools follow a verb_noun pattern (get_daily_activity, save_daily_draft, preview_notion_publication), and the two publication tracks are named in strict parallel. Minor deviations: 'ping' is a bare verb and 'publish_to_notion/publish_to_calendar' use a 'verb_to_noun' form, but these remain predictable and readable.

Tool Count5/5

At 15 tools it sits at the top of the well-scoped band but every tool earns its place: a draft lifecycle plus symmetric preview/publish/status triads for two external targets. No redundant or vestigial tools are apparent.

Completeness4/5

The lifecycle is well covered end-to-end: activity ingestion, draft save/get/list/update/approve, then validate/preview/publish/status for both Notion and Calendar. Minor gaps: no delete/archive for drafts and no explicit retry tool despite status reporting 'retry status,' which agents may need to work around.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Enables validation of commit messages, branch names, author info, push safety, and repository state using commit-check rules, accessible as MCP tools.
    8
    80 PyPI
    1
    MIT
  • -
    license
    Not graded
    quality
    Not graded
    maintenance
    Enables generating AI-powered standups from git activity, with risk flags and markdown digests, via MCP tools.
    -