Skip to main content
Glama

Server Details

Draft, schedule, and analyze content for Substack, Medium, LinkedIn, X, Bluesky, and Threads. Review and edit drafts, schedule notes and articles, check publishing readiness, and inspect available performance data. Actions are scoped to your account and authorized team workspaces. Requires an eligible Narrareach account, OAuth sign-in, and connected platform accounts; capabilities vary by platform. Docs: https://www.narrareach.com/api-docs

Ownership verified
Status
Healthy
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

B3.3/5.0

Scored across 33 tools

Disambiguation3/5

The server has many distinct tools, but several scheduled-content tools overlap: 'scheduled item' vs 'scheduled post' vs 'note' boundaries are blurry, and pairs like cancel_scheduled_item/cancel_scheduled_post and list_scheduled_items/list_scheduled_posts can confuse. Descriptions help somewhat, but an agent may still misselect for a given scheduling intent.

Naming Consistency5/5

All tools follow a consistent snake_case verb_noun pattern (amend_scheduled_item, create_draft, list_notes), with only minor prepositions like reply_to_reader_activity. No mixed casing or verb-style inconsistency.

Tool Count2/5

33 tools is heavy for the apparent scope; many fine-grained operations and multiple similar list/scheduled tools could be consolidated. The count exceeds the 25-tool threshold where coherence typically suffers.

Completeness4/5

Core CRUD/lifecycle is well covered for drafts, notes, articles, scheduled items, media, analytics, and reader activities. Minor gaps remain (e.g., no explicit delete for hashtag sets, limited inspiration management, no dedicated get_article), but agents can mostly work around them.

Available Tools

33 tools
amend_scheduled_itemPreview or amend scheduled itemA
DestructiveIdempotent
Inspect

Preview or amend the time or timezone of a scheduled Note or Article using its exact current revision. apply defaults to false for a non-mutating preview; apply=true performs the amendment after client-side confirmation. Successful retries are desired-state idempotent, and applied changes are reread and verified. Cover, content, paywall, email-delivery, and destination rewrites are unsupported.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
kindNo
applyNo
timezoneNoOptional IANA timezone for scheduledFor.
scheduledForYesNew future local wall-clock date/time in the item timezone unless timezone is supplied.
expectedRevisionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
afterYes
beforeYes
statusYes
appliedYes
proposedYes
nextActionYes
confirmationYes
connectedAccountNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare idempotentHint=true and destructiveHint=true, and the description reinforces rather than contradicts them by explaining desired-state idempotent retries, reread-and-verified applied changes, and the non-mutating preview mode. It also enumerates unsupported rewrite classes, which is behavioral context the annotations do not carry. Permission/auth requirements remain unstated.

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?

Three dense sentences, front-loaded with the core action and scope, then the preview/apply switch, then guarantees and exclusions. The unsupported-rewrites list is long but earns its place by preventing misuse.

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 not be described, and annotations cover the safety profile. The description adds the mutation semantics, idempotency, verification, and unsupported operations. Remaining gaps are minor: revision-mismatch behavior and any authorization prerequisites are unspecified.

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 only 33%, so the description must compensate, and it does for the two most consequential parameters: apply (default false = non-mutating preview) and the revision constraint implied by 'using its exact current revision' for expectedRevision. The id and kind parameters are not elaborated, but the tool's framing (Note or Article) partially covers kind.

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+resource+scope: preview or amend time/timezone of a scheduled Note or Article using the current revision. It implicitly distinguishes itself from amend_scheduled_note_content by declaring content rewrites unsupported, but does not address the close sibling reschedule_scheduled_item, which an agent could easily confuse with this tool.

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?

Gives explicit flag-level guidance (apply=false for preview, apply=true after client-side confirmation), which is genuinely useful. However it names no alternative tool and offers no condition for choosing this over reschedule_scheduled_item, so sibling routing is left to inference.

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

amend_scheduled_note_contentPreview or amend queued LinkedIn post textA
DestructiveIdempotent
Inspect

Preview or replace the text of an untouched, text-only queued LinkedIn post using its scheduled Note id and exact current revision. Changes the queued delivery snapshot, not a shared draft. apply defaults to false for a non-mutating preview; apply=true performs the replacement after client-side confirmation. Provider-accepted, in-flight, media-bearing, and Article schedules are unsupported.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
applyNo
contentYesFull replacement plain text, not a patch.
expectedRevisionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
afterYes
beforeYes
statusYes
appliedYes
proposedYes
confirmationYes
connectedAccountNo

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint=false, destructiveHint=true, idempotentHint=true), the description discloses that the edit mutates the queued delivery snapshot rather than a shared draft, that a confirmation step is expected, and that an exact current revision is required. The unsupported-schedule list adds behavioral boundaries the annotations cannot express.

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?

Four dense sentences, front-loaded with the capability and immediately followed by the preview/mutation distinction and the unsupported scope. No filler, though the final unsupported-list sentence packs four conditions that could be separated for scanability.

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 not be described, and the mutation semantics, default behavior, and unsupported scope are covered. The main omission is the consequence of a stale expectedRevision, which matters for an idempotent-but-guarded mutation.

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 description coverage is only 25%, so the description must compensate, and it does for id (scheduled Note id), expectedRevision (exact current revision), and apply (preview vs replacement). It does not explain what happens on a revision mismatch or the date-time format, leaving one 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?

The description states a specific verb pair and resource: preview or replace the text of a queued LinkedIn post, scoped to text-only, untouched schedules. It implicitly separates itself from the broader amend_scheduled_item and from draft-editing siblings by narrowing to queued delivery snapshots, though it never names a sibling explicitly.

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

Usage Guidelines5/5

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

It gives explicit routing: apply defaults to false for a non-mutating preview, apply=true performs the replacement only after client-side confirmation. It also states when the tool is NOT usable (provider-accepted, in-flight, media-bearing, Article schedules), which is exactly the when-to-use/when-not guidance an agent needs.

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

archive_draftArchive draftA
DestructiveIdempotent
Inspect

Archive an owned draft so it no longer appears in draft lists. Active scheduled items must be cancelled first.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesDraft id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
titleYes
statusYes
updatedAtNo
connectedAccountNo

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, so the safety and repeat-call profile is covered. The description's added value — that archiving removes the draft from lists and requires prior cancellation of scheduled items — is genuine behavioral context, but it does not explain what the flag does or whether the archive is reversible.

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: the action and its effect front-loaded, then the precondition. No filler.

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

Completeness5/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. With annotations covering destructiveness and idempotency and the precondition stated, everything needed to call this correctly is present.

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 100% and the single parameter 'id' is fully documented in the schema. The description references an 'owned draft' but adds no format or syntax detail beyond the schema. Baseline 3 applies.

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 (archive) and resource (draft), and adds a scoping detail ('owned') plus an observable effect ('no longer appears in draft lists'). It does not name a sibling like cancel_scheduled_item or update_draft, so it stops short of full sibling differentiation.

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 for use: active scheduled items must be cancelled first, which implicitly routes the agent to cancel_scheduled_item/cancel_scheduled_post. It does not state when NOT to archive or contrast with update_draft.

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

cancel_scheduled_itemCancel scheduled itemC
Destructive
Inspect

Cancel a scheduled note or article, with optional kind or automatic detection by id.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
kindNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
kindYes
statusYes
alreadyCancelledNo
connectedAccountNo
distributionKindNo
cancellationQueuedNo

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true, idempotentHint=false, and readOnlyHint=false, so the safety profile is covered structurally. The description adds nothing beyond that: it never says whether cancellation is reversible, what happens to the underlying content, or whether it requires ownership/permissions on the item.

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; the verb and object come first. It is arguably too terse given the ambiguity with cancel_scheduled_post, but as a conciseness judgment it is efficient.

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 annotations carry the destructive/non-idempotent profile. Missing pieces are the note-vs-article routing against cancel_scheduled_post and any error or permission behavior, so it is only minimally complete for a destructive mutation.

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 description coverage is 0%, so the description must carry the burden, and it does clarify that kind is optional and auto-detected from id. However, it says nothing about the id format (numeric vs. prefixed, note vs. article id namespace), which matters for a tool with two distinct resource kinds.

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?

Names a specific verb (Cancel) and resource (scheduled note or article), which is clear and distinguishable from mutating siblings like amend_scheduled_item or reschedule_scheduled_item. It does not, however, explicitly distinguish itself from the near-identical sibling cancel_scheduled_post, leaving the agent to infer the note/article vs. post boundary.

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 when-to-use guidance, no prerequisites, and no alternatives. With cancel_scheduled_post and reschedule_scheduled_item in the sibling set, the agent gets no help deciding which cancel or reschedule path applies. It offers only implied usage from the verb.

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

cancel_scheduled_postCancel scheduled postA
Destructive
Inspect

Cancel a pending scheduled post. Already-published posts cannot be cancelled. Returns the new status.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesScheduledPost id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
statusYes
alreadyCancelledNo
connectedAccountNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=false, and readOnlyHint=false, so the safety profile is covered. The description adds real value on top: the precondition that only pending posts are cancellable and that the new status is returned, which an agent needs to interpret the result.

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?

Three short sentences, front-loaded with the action, then the precondition, then the return. Nothing is padded or repeated.

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 not be explained, and annotations cover the destructive/idempotency profile. The main remaining gap is sibling disambiguation from cancel_scheduled_item, which the description never addresses.

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?

Only one parameter ('id') and schema description coverage is 100%, so the schema fully documents it. The description adds no format, constraint, or lookup guidance for the id, leaving this at the baseline for fully-covered schemas.

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?

Clear specific verb+resource ('Cancel a pending scheduled post'), immediately telling the agent what happens. However, it does nothing to distinguish itself from the sibling cancel_scheduled_item, which likely has near-identical semantics, so the agent gets no help choosing between them.

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?

States one exclusion — already-published posts cannot be cancelled — which is useful negative guidance. But it names no alternative for those cases and gives no other context about when to prefer this over cancel_scheduled_item or reschedule_scheduled_item.

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

create_article_from_noteCreate article from noteA
Idempotent
Inspect

Create a linked article draft from a saved note. Preserves the note; repeated requests open the same article without overwriting edits. Does not publish.

ParametersJSON Schema
NameRequiredDescriptionDefault
writerNo
draftIdYes
workspaceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
versionsYes
articleIdYes
articleLinksYes
connectedAccountNo

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnly=false, idempotent=true, and destructive=false. The description adds genuine behavioral detail beyond them: the note is preserved, repeated requests open the same article without overwriting edits, and the tool does not publish. This is meaningful context for a mutation tool.

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?

Three short, front-loaded sentences with zero filler. The core action comes first, followed by the preservation and idempotency guarantees and the no-publish boundary, each earning its place.

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 description covers the key mutation semantics (preservation, idempotency, no publish). The one gap is that the parameters, especially the required draftId, are left undefined.

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?

All three parameters (writer, draftId, workspace) have 0% schema description coverage, and the description explains none of them. It never clarifies that draftId is the required note/draft reference or what writer and workspace control, so the required input's meaning must be guessed.

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 and resource ('Create a linked article draft from a saved note'), which is clear and distinguishes the source (a note) from a generic draft. It does not explicitly name a sibling like create_draft or schedule_article, so differentiation is implied 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?

Usage is implied by 'from a saved note' and 'Does not publish', which hints that schedule_article handles publishing. However, there is no explicit when-to-use guidance or naming of alternatives such as create_draft vs create_article_from_note, leaving the agent to infer the routing.

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

create_draftCreate draftBInspect

Create a new draft owned by the authenticated user. Returns the created draft id and title.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesDraft title.
contentHtmlNoOptional HTML body. If omitted, the draft starts empty. Plain text is also accepted.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
titleYes
createdAtYes
connectedAccountNo

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare this as a non-read-only, non-destructive, non-idempotent write, and the description adds that the draft is owned by the authenticated user and returns id/title. It does not warn that repeated calls create duplicate drafts (relevant given idempotentHint=false), so it adds only modest value beyond 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?

Two short sentences, front-loaded with the action and scoped by ownership; no filler or repetition of the schema.

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 single-required-parameter create tool with full annotations and an output schema (so return values need not be described), the description covers purpose and ownership adequately. It is only missing guidance on when this is the right creation tool among the create_* siblings.

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 description coverage is 100%, so title and contentHtml semantics are already fully documented in the schema. The description adds no field-level meaning, which is the expected baseline of 3 when the schema does the heavy lifting.

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 and resource ('Create a new draft') plus ownership scope ('owned by the authenticated user'), which distinguishes it from list_drafts/get_draft/update_draft. It does not explicitly differentiate from the sibling create_article_from_note, so it falls short of a 5.

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 use this tool versus alternatives such as create_article_from_note, nor any prerequisites or exclusions. The context is only implied by the tool name.

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

get_draftGet draftA
Read-only
Inspect

Get a single draft by id, including full HTML content.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesDraft id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
metaYesA JSON value stored by Narrareach.
titleYes
statusYes
createdAtYes
updatedAtYes
contentHtmlYes
contentJsonYesA JSON value stored by Narrareach.
publishedToYes
publishedCountYes
lastPublishedAtYes
connectedAccountNo

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered by structured data. The description adds that the full HTML body is returned, which is useful context, but says nothing about pagination, error cases, or whether the HTML is raw or sanitized.

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 compact sentence with the resource and payload scope front-loaded and no filler. It is as short as it can be while still conveying the scope, though it is brief enough that it forgoes useful context.

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 one-parameter read tool with an output schema and full annotation coverage, the description is essentially complete — return values and safety are handled elsewhere. The only minor gap is the absence of any error behavior for invalid ids.

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 description coverage is 100% for the single 'id' parameter, so the schema already documents it. The description's 'by id' phrase adds no format or semantic detail beyond the schema, making the baseline of 3 appropriate.

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 and resource ('Get a single draft by id') and scopes the return payload ('including full HTML content'). This clearly distinguishes it from list_drafts, create_draft, and update_draft among the siblings.

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 'single draft by id' framing implies the retrieval use case, but there is no explicit guidance on when to choose this over list_drafts or get_note, nor any note about behavior for a missing/invalid id. Usage is only implied.

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

get_noteGet noteA
Read-only
Inspect

Get a single scheduled or posted note by id, including full content and stored metrics.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesScheduledAutoPost id.
workspaceNoOptional authorized team workspace name or id. Absence selects the authenticated user’s personal account.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
draftYes
errorYes
statusYes
contentYes
contextYes
itemUrlYes
postUrlYes
platformYes
postedAtYes
timezoneYes
createdAtYes
updatedAtYes
retryCountYes
contentHashYes
contentJsonYesA JSON value stored by Narrareach.
contentMetaYesA JSON value stored by Narrareach.
contentTypeYes
scheduledForYes
externalPostIdYes
connectedAccountNo
distributionKindYes
performanceSnapshotsYes

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, so safety is covered. The description adds that the response includes stored metrics, which is useful scope information, but it does not explain what happens when an id matches nothing or that the operation is not idempotent despite the hint.

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?

One sentence, front-loaded with the action and resource, with no filler. Every clause (single, by id, full content, stored metrics) carries information.

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 not be spelled out, and the description covers the input contract adequately. It is essentially complete for a simple read-by-id tool, with only behavioral edge cases (missing id, auth scope) left implicit.

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 description coverage is 100%, including a meaningful note that an absent workspace selects the personal account, so the schema carries the parameter meaning. The description adds nothing beyond 'by id', so the baseline 3 applies.

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 (Get), resource (note), scope (single, by id) and what is returned (full content and stored metrics). The singular 'single ... note by id' cleanly distinguishes it from the sibling list_notes.

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 word 'single ... by id' implies this is the detail-lookup counterpart to list_notes, but the description never states when to prefer it or names any alternative explicitly. No prerequisites or exclusions are given.

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

get_platform_analyticsGet platform analyticsC
Destructive
Inspect

Fetch analytics for a connected platform. Returns account-level summary data where available, otherwise stored Narrareach note performance and connection readiness.

ParametersJSON Schema
NameRequiredDescriptionDefault
platformYes
recentLimitNoHow many recent posts/notes to include. Default 10.

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
handleNo
reasonNo
sourceNo
totalsNo
messageNo
profileNo
summaryNo
platformYes
usernameNo
verifiedNo
benchmarkNo
connectedYes
fetchedAtNo
followersNo
followingNo
readinessNo
growthDataNo
tweetCountNo
cachedStatsNoA JSON value stored by Narrareach.
displayNameNo
publicationNo
recentNotesNo
recentPostsNo
statsCachedAtNo
engagementDataNo
profilePictureNo
connectedAccountNo
verifiedFollowersNo
analyticsAvailableNo
needsExtensionSyncNo
postAnalyticsAvailableNo
profileAnalyticsAvailableNo
officialAnalyticsAvailableNo

TDQS

C2.6/5.0
Behavior1/5

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

The description frames this purely as a read ('Fetch analytics', 'Returns account-level summary data'), yet annotations declare readOnlyHint=false, destructiveHint=true, and idempotentHint=false. A fetch-and-return tool being flagged destructive is a direct contradiction the agent has no way to reconcile. Flagged as an annotation contradiction.

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 compact sentences, front-loaded with the core action and followed by the return behavior. No filler, though the second sentence is somewhat dense about fallback behavior.

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 explained, and the description does convey what data comes back. But the behavioral picture is incomplete and actively conflicted against the annotations, leaving the agent unsure whether this call mutates state.

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 only 50%, so the description should compensate for the undocumented parameter. It adds no parameter detail at all - neither the meaning of recentLimit nor the platform enum values are explained beyond what the schema already carries.

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 and resource ('Fetch analytics for a connected platform') and clarifies the two data sources it returns. However, it does not distinguish itself from the overlapping sibling get_stats_insights, so an agent cannot tell which to pick from the description alone.

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?

No when-to-use guidance, prerequisites, or alternatives are given. The sibling get_stats_insights plausibly overlaps in scope, and nothing routes the agent between them.

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

get_scheduled_item_readinessCheck scheduled item readinessA
Read-onlyIdempotent
Inspect

Inspect one scheduled Note or Article using stored Narrareach evidence without contacting a provider. Returns revision, draftId, destination, timing, cover, subscribe controls, paywall, email delivery, stored remote receipt, issues, and next action. Article draft content is local and is not a provider-verified copy; queued Note content is stored on the scheduled Note.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
kindNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
kindYes
titleYes
checksYes
issuesYes
statusYes
draftIdYes
itemUrlYes
revisionYes
timezoneYes
platformsYes
readinessYes
nextActionYes
destinationsYes
scheduledForYes
schemaVersionYes
connectedAccountNo
articleBodySourceYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, closed-world, so the bar is lower. The description adds genuine behavioral value beyond them: data provenance caveats ('Article draft content is local and is not a provider-verified copy; queued Note content is stored on the scheduled Note') and the no-provider-contact constraint.

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

Conciseness3/5

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

Front-loaded purpose is good, but the middle sentence is a laundry list of return fields ('revision, draftId, destination, timing, cover...issues, and next action') that largely duplicates the output schema, which already exists. That sentence does not fully earn its place.

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 read-only inspection tool with an output schema, the description covers purpose and the important provenance/staleness caveat. The main remaining gap is the unexplained 'id'/'kind' parameters, which neither description nor schema documents.

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 the burden, yet it never explains 'id' (what identifier, which namespace) and only obliquely implies 'kind' via 'Note or Article'. Two undocumented parameters are left for the agent to guess at.

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 (Inspect), resource (one scheduled Note or Article), and a distinguishing scope ('using stored Narrareach evidence without contacting a provider'). This clearly separates it from get_draft/get_note and from the amend/reschedule siblings.

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 'without contacting a provider' implies the usage context (a cached, non-live readiness check), but there is no explicit when/when-not guidance or named alternative (e.g. use get_draft to fetch live draft content). Usage is only implied.

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

get_stats_insightsGet Stats insightsA
Read-onlyIdempotent
Inspect

Read stored Narrareach Stats for a period: reach, engagement, conversion, publishing rhythm, engagement peak, other-writers timing benchmark, and latest audience snapshot. Does not live-fetch Substack or per-platform account analytics.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoInclusive end date (YYYY-MM-DD). Required when period is custom. Must be a completed day.
fromNoInclusive start date (YYYY-MM-DD). Required when period is custom.
periodNoStats window. Defaults to 30d. custom requires from and to as complete YYYY-MM-DD dates.
platformsNoConnected platforms to include. Defaults to every connected platform the caller can read.
workspaceNoOptional authorized team workspace name or id. Absence selects the authenticated user’s personal account.
contentTypesNoOptional content types: article, note, social_post.
publicationIdNoOptional Substack publication id. Team authors can only read an assigned publication.

Output Schema

ParametersJSON Schema
NameRequiredDescription
scopeYes
audienceYes
outcomesYes
generatedAtYes
nicheTimingYes
schemaVersionYes
engagementPeakNo
connectedAccountNo
platformPerformanceNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, non-destructive behavior, so safety is covered. The description adds genuinely useful context beyond them: this reads a stored snapshot rather than live-fetching, which explains staleness and latency expectations. It does not mention pagination or auth/workspace scoping nuance.

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 sentences, zero filler, with scope and the stored-vs-live distinction front-loaded. The metric enumeration earns its space by telling the agent what a call yields.

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 7 optional params and an output schema present, the description needn't explain return values, and it correctly covers scope plus the live-data exclusion. It is nearly complete; only explicit guidance on combining workspace/publicationId scoping is absent.

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 description coverage is 100%, so all 7 parameters (period, from/to, platforms, workspace, contentTypes, publicationId) are already documented with defaults, enums, and constraints. The description adds no syntax, format, or interaction detail beyond the schema, so the baseline 3 applies.

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 (read) and resource (stored Narrareach Stats) and enumerates the exact metric families returned. It also draws a boundary against live per-platform analytics, which cleanly separates it from sibling get_platform_analytics.

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 when-not condition ("Does not live-fetch Substack or per-platform account analytics"), routing the agent to the alternative for live data. It never names the sibling tool explicitly and offers no positive 'use this when' trigger phrase, so it stops short of a 5.

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

get_user_profileGet user profileA
Read-only
Inspect

Get the authenticated Narrareach user — name, email, timezone, plan, connected platforms, Substack publications, and any team workspaces/writers available for multi-writer scheduling on this connection.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
nameYes
planYes
emailYes
timezoneYes
createdAtYes
xConnectionYes
integrationsYes
teamSchedulingYes
connectedAccountNo
connectedPlatformsYes
subscriptionStatusYes
substackPublicationsYes

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, so safety is covered. The description adds the useful framing that the result is scoped to the authenticated connection and this specific account, but discloses nothing about caching, rate limits, or behavior of the nested platform/publication data beyond the field list. Note the odd idempotentHint=false on a parameterless read is not addressed.

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, though the long comma-separated field enumeration is somewhat list-like and partially duplicates what the output schema already defines.

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

Completeness5/5

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

For a zero-parameter, read-only tool with an output schema present, the description supplies everything needed to invoke it correctly along with useful framing of what the payload represents. Return-value detail lives in the output schema, so nothing essential is missing.

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 the baseline of 4 applies; the description correctly implies no input is needed by describing the call as retrieving the current authenticated user rather than a targeted lookup.

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+resource ('Get the authenticated Narrareach user') and enumerates the exact data surface returned (name, email, timezone, plan, connected platforms, publications, workspaces), which clearly separates it from siblings like list_workspaces or get_draft. An agent can identify this as the identity/bootstrap call 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 Guidelines3/5

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

Usage is only implied — the phrase 'the authenticated ... user' hints this is the entry point for discovering available workspaces and writers, but there is no explicit when-to-use, when-not, or named alternative. No prerequisites or call-ordering guidance is given.

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

list_content_versionsList related content versionsB
Read-onlyIdempotent
Inspect

List a note and its linked article with independent statuses and destinations.

ParametersJSON Schema
NameRequiredDescriptionDefault
writerNo
draftIdYes
workspaceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
versionsYes
articleIdYes
articleLinksYes
connectedAccountNo

TDQS

B3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description adds the useful nuance that the note and linked article carry independent statuses and destinations, but says nothing about pagination, result shape, or auth/permission requirements.

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 padding. It is efficient, though the phrasing 'list a note and its linked article' reads slightly awkwardly for a listing operation.

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 spelled out, and the read-only nature is covered by annotations. However, with 0% parameter documentation and no usage context, the definition is thinner than a three-parameter tool warrants.

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 three parameters (writer, draftId, workspace), and the description names none of them. It only implies via 'a note' that draftId selects the subject, leaving writer and workspace entirely undocumented.

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 clarifies that the resource is a note plus its linked article with independent statuses and destinations, which resolves the ambiguity of the name 'content versions'. It is clear but does not explicitly distinguish itself from siblings like get_note or get_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?

No when-to-use guidance, no prerequisites, and no mention of alternatives such as get_note or get_draft. The agent must infer that this is the tool for inspecting a note/article pair's publication state.

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

list_draftsList draftsA
Read-only
Inspect

List the authenticated user's drafts, newest first. Excludes archived drafts and returns compact summaries without full HTML content.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax number of drafts to return (1–100). Default 25.
queryNoOptional case-insensitive substring match against the draft title.
statusNoOptional status filter.

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
draftsYes
connectedAccountNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover the read-only, non-destructive safety profile, so the description correctly focuses on extra behavior: newest-first ordering, exclusion of archived drafts, and compact summaries without full HTML. The archived-exclusion sits in mild tension with the ARCHIVED value in the status enum, which is worth clarifying but is not an annotation contradiction.

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: scope and ordering first, then exclusions and return-shape caveats. Every clause carries information an agent needs.

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 not be described; the description still adds the useful note that summaries omit HTML. With full annotation and schema coverage plus only three simple parameters, the definition is nearly complete, missing only a hint about the archived-filter interaction.

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 description coverage is 100%, so limit, query, and status are fully documented in the schema. The description adds no format or syntax detail beyond that, which is the expected baseline when the schema does the heavy lifting.

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 and resource scoped to the authenticated user, plus ordering (newest first). It is clearly distinguishable from get_draft (single) and list_notes (different resource), though it never explicitly names those siblings.

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?

Usage is only implied: the tool lists the current user's drafts and nothing more. There is no explicit when-to-use, no guidance on choosing this over get_draft for a single draft, and no mention of pagination strategy given the absence of a cursor parameter.

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

list_hashtag_setsList hashtag setsA
Read-onlyIdempotent
Inspect

Personal saved hashtag sets. Saving sets never inserts hashtags into content or publishes anything. Up to 20 sets, 30 hashtags per set.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
setsYes
connectedAccountNo

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds capacity limits (20 sets, 30 hashtags per set) and a note that saving sets has no publishing side effect, but it does not describe listing behavior, return format, or pagination beyond what the output schema provides.

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?

The description is three short sentences with no waste and is reasonably front-loaded. The middle sentence about saving behavior is slightly tangential for a list tool, but it remains concise.

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

Completeness5/5

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

For a zero-parameter read-only list tool with an output schema and clear annotations, the description supplies the relevant domain constraints (capacity limits) and safety context. Nothing an agent needs to invoke the tool correctly is missing.

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?

This tool has zero parameters, so the baseline is 4. There is no parameter information for the description to add or omit, and it appropriately does not discuss parameters.

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 the resource clearly ('Personal saved hashtag sets') and implies retrieval, so the agent knows it lists saved hashtag collections. However, it does not explicitly name the verb 'list' nor distinguish itself from the sibling save_hashtag_sets, which is the most likely alternative.

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 use this tool versus save_hashtag_sets or other list tools. The mention of saving behavior does not help an agent decide when listing is appropriate, and no prerequisites or exclusions are given.

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

list_inspiration_postsList inspiration postsB
Read-only
Inspect

List posts the user has saved to their inspiration library (newest first).

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNoFilter to posts containing this tag.
limitNoDefault 25.
platformNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
postsYes
connectedAccountNo

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, destructiveHint=false, and openWorldHint=false, so the safety profile is covered structurally. The description usefully adds that results come from the user's saved library and are returned newest-first, but says nothing about pagination, result caps beyond 'limit', or how tag/platform filters interact.

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, tightly written sentence with the resource and the ordering constraint front-loaded. Nothing is padded or redundant.

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 all three parameters are optional. Still, for a filtered list tool the description omits pagination behavior, whether tag and platform combine, and any sense of result volume — modest gaps for an otherwise simple read tool.

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 67%: tag and limit carry descriptions, but the platform enum parameter has none (its enum values are largely self-explanatory). The description adds no parameter-level detail at all, so the schema does the work and the baseline of 3 applies.

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 a specific resource (posts saved to the user's inspiration library), plus result ordering (newest first). This differentiates it from sibling list_* tools like list_drafts, list_notes, and list_scheduled_posts, though it never names an alternative 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?

The description gives no when-to-use guidance, no prerequisites, and no routing against the many sibling list tools (list_drafts, list_notes, list_reader_activities, etc.). An agent must infer from the resource name alone that this is the tool for saved inspiration content.

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

list_linkedin_article_destinationsList LinkedIn Article destinationsB
Destructive
Inspect

List personal profiles and Company Pages available for LinkedIn Articles. With authorUrn, also returns newsletters owned by that author.

ParametersJSON Schema
NameRequiredDescriptionDefault
refreshNoRefresh verified destinations from LinkedIn instead of reusing the recent session-bound list.
authorUrnNoOptional author URN returned by this tool. When supplied, Narrareach also returns newsletters owned by that profile or Page.

Output Schema

ParametersJSON Schema
NameRequiredDescription
authorsYes
warningNo
newslettersYes
connectedAccountNo
pageRefreshFailedNo
articleSessionActiveNo
usingSavedDestinationsNo
newsletterRefreshFailedNo

TDQS

B3.2/5.0
Behavior2/5

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

Annotations declare destructiveHint=true and readOnlyHint=false, yet the description frames the tool as a plain enumeration and never explains what is destructive or mutated (the refresh parameter's cache/session side effect is the only hint). The description does add the conditional authorUrn behavior, but the safety-relevant behavior implied by the annotations is left unexplained.

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, zero filler, with the base behavior front-loaded and the conditional authorUrn branch second. Every clause earns its place.

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 a full input schema and an output schema present, the description does not need to describe return values; it correctly limits itself to scope plus the authorUrn branch. The remaining gap is routing context — no comparison against the sibling destination-listing tool and no reconciliation of the destructive annotation.

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 description coverage is 100% and both parameters are fully documented there, including the authorUrn newsletter behavior that the description merely restates. The description adds no syntax, defaults, or edge-case semantics beyond the schema, so the baseline 3 applies.

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 pairs a specific verb ('List') with a specific resource ('personal profiles and Company Pages available for LinkedIn Articles') and adds the conditional newsletter behavior. An agent knows exactly what comes back. It stops short of a 5 because it never names the closely related sibling list_linkedin_destinations, so the distinction between 'all destinations' and 'destinations valid for Articles' must be inferred from the scope phrase alone.

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 scope phrase 'available for LinkedIn Articles' weakly implies the calling context (picking a destination when publishing an article), but there is no explicit when-to-use, no prerequisites, and no mention of the alternative list_linkedin_destinations. An agent must guess which of the two list tools to call.

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

list_linkedin_destinationsList LinkedIn destinationsA
Destructive
Inspect

Refresh and list LinkedIn personal profiles and Company Pages available for Notes. Returns accountId, organizationUrn for Pages, and the configured default destination.

ParametersJSON Schema
NameRequiredDescriptionDefault
writerNoOptional team writer name, handle, or id within the authorized workspace.
workspaceNoOptional authorized team workspace name or id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
contextYes
destinationsYes
connectedAccountNo
defaultDestinationYes

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already flag destructiveHint=true, readOnlyHint=false, openWorldHint=true, and idempotentHint=false. The description adds 'Refresh,' which signals a side effect beyond pure reading, but it does not explain what refresh destroys, what permissions are required, or why the operation is destructive.

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 concise sentences with the purpose front-loaded. The second sentence restates return fields that are already available in the output schema, adding minor redundancy, but overall it is efficient.

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?

The definition is largely complete for a simple list/refresh tool: it states the resource, scope, return fields, and annotations cover safety. The main gap is the unexplained destructive refresh behavior and lack of explicit usage guidance, but the output schema and annotations reduce the burden.

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 description coverage is 100%, so the two optional parameters (writer, workspace) are fully documented in the schema. The description adds no parameter-specific meaning, which is acceptable given the high schema coverage.

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 and resource: lists LinkedIn personal profiles and Company Pages available for Notes. The 'for Notes' scope differentiates it from list_linkedin_article_destinations, though it does not explicitly name that sibling as out of scope.

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?

Usage is implied by 'available for Notes,' suggesting it should be used when selecting LinkedIn destinations for note publishing. However, there are no explicit when-to-use, when-not-to-use, or alternative-tool instructions.

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

list_medium_publicationsList Medium publicationsA
Read-onlyIdempotent
Inspect

List Medium publications available to the connected account with writer access or higher. Uses the saved list unless refresh is true. Returns publication ids and canPublish: true indicates direct publishing permission; false indicates editorial review with content unpublished until editor acceptance.

ParametersJSON Schema
NameRequiredDescriptionDefault
refreshNoCheck Medium for publication changes instead of using the saved list.

Output Schema

ParametersJSON Schema
NameRequiredDescription
connectedYes
publicationsYes
connectedAccountNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld). The description adds genuinely useful behavior beyond them: the result is served from a cached saved list unless refresh is set, and canPublish=false means editorial review with content held unpublished until editor acceptance. That caching/staleness disclosure is the kind of trait annotations cannot express.

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 sentences, front-loaded with the scope and followed by the caching rule and output interpretation. Nothing is padding, though the second sentence is dense and partly restates the schema's refresh semantics.

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

Completeness5/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 need not be enumerated, yet the description still supplies the one interpretation that matters (canPublish meaning) plus the cache/refresh behavior. Combined with rich annotations and full schema coverage, an agent has everything needed to call and interpret this tool.

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?

There is a single parameter with 100% schema description coverage, so the schema already defines refresh. The description's 'Uses the saved list unless refresh is true' paraphrases the schema rather than adding format or side-effect detail, so the baseline 3 applies.

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 names a specific verb (List) and resource (Medium publications) and scopes it precisely: publications with writer access or higher on the connected account. That resource is clearly distinct from siblings like list_linkedin_destinations or list_workspaces, so an agent can route without opening schemas.

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 gives a clear operational condition — 'Uses the saved list unless refresh is true' — and explains what the output means for the publish decision (canPublish true/false). It stops short of naming alternatives or when-not-to-use guidance, so it is strong context without explicit exclusion rules.

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

list_notesList notesB
Read-only
Inspect

List the user’s notes across every supported note platform. Includes scheduled, failed, and posted notes with the latest stored engagement snapshot when available.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoDefault 25.
queryNoOptional case-insensitive substring match against the note content or title.
statusNo
writerNoOptional authorized team writer name, handle, or id. "me" selects the linked voice. Requires workspace.
platformNo
workspaceNoOptional authorized team workspace name or id. Absence selects the authenticated user’s personal account.

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
notesYes
contextYes
connectedAccountNo

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, destructiveHint=false, and openWorldHint=false, so the safety profile is covered structurally. The description adds meaningful scope context: notes are returned across platforms and across all lifecycle states, and engagement snapshots are included "when available." It says nothing about pagination or ordering, so additional disclosure is limited.

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 platform scope is front-loaded and the status/snapshot detail follows. Every clause carries information.

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 explanation is unnecessary, and all six parameters are optional. However, for a 6-parameter, 9-value-status filter tool, the description omits how filtering narrows results and what the default/unfiltered behavior yields, leaving the agent to infer this from the schema alone.

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 description coverage is 67%, with the two enum params (status, platform) having no descriptions in the schema at all. The description's mention of "scheduled, failed, and posted notes" hints at the status filter but does not explain the status/platform/query/limit interactions or defaults. It neither compensates fully for the coverage gap nor is entirely silent.

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 gives a specific verb and resource ("List the user's notes") and scopes it to "every supported note platform," plus clarifies the status coverage (scheduled, failed, posted). It is clearly the collection-level counterpart to get_note, though it never explicitly names siblings like list_scheduled_items or list_drafts to sharpen the boundary.

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 when-to-use guidance and no alternatives are named, even though several siblings overlap heavily (get_note for a single note, list_scheduled_items, list_drafts). The reader must infer from the tool name and status list that this is the cross-platform all-statuses listing.

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

list_reader_activitiesList reader activitiesC
Read-onlyIdempotent
Inspect

Pull Substack likes, comments, and restacks from the authenticated Narrareach account.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNotime
typeNoall
limitNo
stateNoinbox
cursorNo
substackConnectionIdNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
pageYes
summaryYes
activitiesYes
connectedAccountNo

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety and idempotency profile is covered. The description adds useful context that the data comes from Substack via an authenticated Narrareach account. It does not, however, disclose pagination behavior (a cursor param exists) or default result sizing, so it adds only modest value 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.

Conciseness4/5

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

A single efficient sentence with the core verb and resource front-loaded and no filler. It is not verbose, though its brevity borders on under-specification for a six-parameter tool rather than earning full conciseness credit.

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 explained. However, for a tool with six parameters including pagination and an inbox/history state toggle, the description omits how to paginate, filter by state, or sort. Given the 0% schema coverage, the definition is not complete enough to guide correct invocation of the non-trivial parameters.

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 six parameters, so the description must compensate and largely does not. It names likes, comments, and restacks, which loosely maps to the 'type' enum, but the important 'state' enum (inbox vs history), 'sort', 'limit', 'cursor' pagination, and 'substackConnectionId' are all left unexplained. Only one of six parameters receives any implicit coverage.

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 uses a specific verb ('Pull') with a concrete resource ('Substack likes, comments, and restacks') and scopes it to 'the authenticated Narrareach account.' An agent can tell this is a read/list tool for reader engagement data. It does not explicitly differentiate from siblings like reply_to_reader_activity or update_reader_activity, which keeps it short of a 5.

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 when-to-use guidance, no mention of alternatives among the ~34 sibling tools, and no exclusions or prerequisites. The agent is left to infer that this is the listing tool versus the reply/update siblings. No usage context is provided.

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

list_scheduled_itemsList scheduled itemsB
Read-onlyIdempotent
Inspect

List Notes and Articles in one bounded schedule view with destination, content-readiness checks, stored provider receipt state, and next action. workspace and writer scope authorized team Notes; team Articles remain private to their owner. Reads stored evidence without contacting a provider.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNo
fromNo
kindNo
limitNo
statusNoactive
writerNoOptional authorized team writer name, handle, or id. "me" selects the linked voice. Requires workspace.
workspaceNoOptional authorized team workspace name or id. Absence selects the authenticated user’s personal account.

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
itemsYes
contextYes
schemaVersionYes
connectedAccountNo

TDQS

B3.2/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive/closed-world, so the safety profile is covered. The description adds genuinely new behavioral context: 'Reads stored evidence without contacting a provider,' plus what the view surfaces (destination, readiness checks, provider receipt state, next action) and the privacy rule for team Articles.

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 dense sentences that front-load the core action and its scope; there is little waste. The phrase 'stored provider receipt state' is jargon-heavy but earns its place as returned-field context.

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 explained, and annotations cover safety. However, for a 7-parameter tool with 29% schema coverage and no usage routing, the description leaves an agent guessing about date-range and status filtering.

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 only 29%, so the description must carry weight, yet it clarifies only the workspace/writer authorization semantics and says nothing about the from/to date bounds, kind, status, or limit parameters. Five of seven parameters remain undocumented in both places.

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 (scheduled items = Notes and Articles), and the phrase 'one bounded schedule view' scopes it. It implicitly distinguishes itself from list_scheduled_posts by naming Notes and Articles, but never says so 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?

The description explains authorization scope ('workspace and writer scope authorized team Notes') but gives no when-to-use condition, no exclusions, and no routing to siblings like get_scheduled_item_readiness or list_scheduled_posts. The agent must infer its place from the name alone.

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

list_scheduled_postsList scheduled postsB
Read-only
Inspect

List scheduled posts for the authenticated user, ordered by scheduled time ascending.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoISO datetime; only return posts at/before this time.
fromNoISO datetime; only return posts at/after this time.
limitNoDefault 25.
statusNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
postsYes
connectedAccountNo

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, destructiveHint=false, idempotentHint=false and openWorldHint=false, so safety is covered. The description adds one genuinely useful behavioral fact not in annotations: results are ordered by scheduled time ascending. It says nothing about pagination despite the limit param, which is a notable gap for a list tool.

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 compact sentence that front-loads the resource and scope, then adds ordering. No filler or redundancy.

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?

Output schema exists so return values need not be explained, and annotations cover the safety profile. However, the description omits pagination/result-volume behavior and any disambiguation from list_scheduled_items, leaving moderate gaps for a filtered list tool.

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 75%, close to the high-coverage threshold, and to/from/limit are already documented in the schema. The description adds no parameter meaning at all, and the status enum has no schema description either, though its values are self-explanatory.

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 (scheduled posts), plus scope (authenticated user) and ordering. It does not differentiate itself from the near-identical sibling list_scheduled_items, which an agent could easily confuse it with.

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?

No guidance on when to use this versus list_scheduled_items or list_scheduled_posts alternatives, and no stated prerequisites. Usage must be inferred purely from the name and scope phrase.

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

list_workspacesList workspacesA
Read-only
Inspect

Discover the authenticated account’s personal context and authorized team workspaces, writers, and publications. Returns workspace and writer identifiers for team scheduling; no login switch is required.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
routingYes
defaultContextYes
teamWorkspacesYes
connectedAccountNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds real context beyond them: it returns identifiers only and requires no login switch, meaning it exposes all authorized contexts in one call. It does not mention pagination or ordering, but for a no-param read this is solid.

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 sentences, no filler, with the scope statement front-loaded and the auth note second. Every clause earns its place.

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 zero-param, read-only tool with an output schema and full annotation coverage, the description supplies enough to call it correctly. The only gap is routing guidance relative to the other list_* tools, which is not strictly required here.

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?

Zero parameters, so the schema baseline is 4 and there is nothing for the description to disambiguate. The description instead characterizes the return payload, which the output schema covers, so no additional credit or penalty applies.

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 clear resource set — workspaces, writers, publications — and what it returns (identifiers for team scheduling). 'Discover' is a slightly softer verb than 'list', but the object is concrete enough that an agent can distinguish it from siblings like list_medium_publications or list_linkedin_destinations.

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 'for team scheduling' implies when this tool is useful (before scheduling team content), but no alternative or exclusion is named, and the many list_* siblings are not addressed. Usage is implied rather than stated.

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

reply_to_reader_activityReply to reader activityB
Destructive
Inspect

Publish a reply to an owned Substack comment activity. A successful reply moves the activity to History.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
activityIdYes
idempotencyKeyNo
substackConnectionIdNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusYes
replyIdYes
successYes
deduplicatedYes
connectedAccountNo

TDQS

B3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=true, openWorldHint=true, and idempotentHint=false, so the safety profile is covered. The description adds genuinely new context — that a successful reply moves the activity to History — which tells the agent about a state transition beyond the annotations. It does not describe auth requirements or what specifically is at risk, so it stays at a 3.

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 compact sentences with the core action front-loaded and the outcome stated second. No filler or repetition, though it is arguably too terse given the undocumented parameters.

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 explained, and annotations carry the safety profile. However, with 0% schema coverage on four parameters, the description should say more about the inputs than it does, leaving the definition only minimally complete for a mutation tool.

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 none of the four parameters are documented anywhere. The description mentions no parameters at all — not activityId, text, idempotencyKey, or substackConnectionId — leaving the agent to infer meaning purely from names and types. It fails to compensate for the coverage 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 and resource: 'Publish a reply to an owned Substack comment activity.' The word 'owned' scopes the operation, which helps an agent avoid using it on arbitrary activities. It does not explicitly name how it differs from the sibling update_reader_activity, keeping it just short of a 5.

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 when-to-use or when-not-to-use guidance, and no alternative tools are named. The only implicit condition is 'owned' activity, which is a constraint rather than a routing instruction. An agent must infer that update_reader_activity or list_reader_activities are the neighboring alternatives.

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

reschedule_scheduled_itemReschedule scheduled itemB
Destructive
Inspect

Reschedule a scheduled note or article, with optional kind or automatic detection by id. Pending LinkedIn session sync leaves the existing schedule unchanged. Returns the outcome and informational advisories.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
kindNo
timezoneNoOptional updated IANA timezone the scheduledFor time above is expressed in. Defaults to the item's existing timezone.
scheduledForYesNew future local wall-clock date/time interpreted in timezone, including DST; defaults to the existing item timezone. A Z or explicit UTC offset represents an absolute instant. LinkedIn articles require at least 20 minutes of lead time.

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemYes
kindYes
warningsNo
advisoriesNo
connectedAccountNo

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare destructive=true, idempotent=false, openWorld=true. The description adds two genuinely useful behavioral facts beyond them: the LinkedIn session-sync no-op case and the returned advisories. It still never warns that the prior schedule is replaced (the destructive implication) or that the call is non-idempotent.

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?

Three compact sentences with the action front-loaded, followed by the operational caveat and return note. Little waste, though the 'Returns the outcome and informational advisories' sentence is slightly redundant given an output schema exists.

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?

Output schema exists, so return values are covered, and the LinkedIn 20-minute lead time lives in the schema. For a destructive, non-idempotent mutation across an open-world LinkedIn integration, however, the description omits permission requirements and the consequence of replacing an existing schedule.

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 50%, and the description only expands on kind, explaining the auto-detection fallback that the schema does not state. timezone and the lead-time semantics of scheduledFor are documented in the schema itself, so the prose adds only a marginal amount beyond structured fields.

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 (reschedule) and resource (a scheduled note or article), and clarifies that kind may be supplied or auto-detected by id. It does not differentiate itself from the sibling amend_scheduled_item, so an agent still has to guess which mutation to pick.

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 when-to-use guidance and no mention of alternatives such as amend_scheduled_item or cancel_scheduled_item. The only conditional statement ('pending LinkedIn session sync...') describes behavior, not selection criteria.

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

save_hashtag_setsSave hashtag setsB
Idempotent
Inspect

Personal saved hashtag sets. Saving sets never inserts hashtags into content or publishes anything. Up to 20 sets, 30 hashtags per set.

ParametersJSON Schema
NameRequiredDescriptionDefault
setsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
setsYes
connectedAccountNo

TDQS

B3.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false and idempotentHint=true; the description usefully adds that saving never inserts hashtags into content or publishes anything, directly addressing the main side-effect fear for a write tool. It does not, however, explain whether existing sets are replaced or appended to, which matters given idempotentHint=true.

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?

Three short sentences, front-loaded with the resource and the most important behavioral guarantee, with no filler. Slightly terse at the cost of completeness, but every sentence earns its place.

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 limits plus no-publish guarantee cover the essentials for a single-parameter write. The definition still leaves overwrite/append semantics and hashtag formatting unstated, which an agent needs to call this correctly.

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 description coverage is 0%, so the description must compensate. It does surface the key caps ('Up to 20 sets, 30 hashtags per set') that match the schema's maxItems limits, but it says nothing about the name field, hashtag format (with or without '#'), or whether the payload replaces existing saved sets.

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 the resource precisely ('Personal saved hashtag sets') and implies the save/store action, which is enough to distinguish it from the read-only sibling list_hashtag_sets. It does not explicitly name that sibling, so 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 Guidelines2/5

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

There is no explicit when-to-use guidance, no prerequisite or permission notes, and no reference to the alternative list_hashtag_sets for reading sets back. The only usage-adjacent signal is the reassurance about side effects, which is behavioral rather than situational.

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

schedule_articleSchedule articleAInspect

Schedule an article to Substack, Medium, LinkedIn Articles, or X. Creates an article draft when draftId is absent. Supports cover and inline images, Substack-only inline video, and destination-specific SEO metadata. Substack supports native paywall and subscribe controls at explicit positions in contentHtml; ordinary links remain links. Audience and email delivery are controlled by the supplied fields. LinkedIn Articles requires a separate browser-session connection from regular posts; pending session sync saves new input as a draft without scheduling. Returns scheduling outcomes and advisories.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoOptional tag list for newly created drafts. Substack receives all supplied tags. Medium receives its supported first 5 topics and returns a warning when extras are omitted. The saved draft remains unchanged.
mediaNoOptional inline images or Substack article videos for a newly created draft. Replaces {{media:N}} placeholders in array order; leftovers are appended. kind defaults to image; video requires Substack as the sole platform. Supports public URLs, data URIs, and base64 bytes.
titleNoRequired when creating a new draft.
draftIdNoOptional existing article draft id to schedule as-is.
subtitleNoOptional article subtitle for newly created drafts. Substack omits subtitles over 250 characters and returns a warning without changing the saved draft.
timezoneNoIANA timezone the scheduledFor time(s) above are expressed in (e.g. "Europe/London"). Default UTC.
platformsYes
coverImageNoOptional cover image for a newly created draft, placed at the top of the published body. Supports public HTTPS URLs, data URIs, or base64 image bytes. URL ingestion depends on source-host access.
contentHtmlNoRequired when creating a new draft. Supports public <img> or <video> elements and {{media:N}} placeholders resolved from media entries. Video articles require Substack as the sole platform. Native Substack paywall markup is <hr data-type="paywall"> at the selected paragraph boundary, or a single {{NARRAREACH_PAYWALL}} token; paywallMarker supports custom tokens. Native subscribe block markup is <div data-type="button" data-kind="subscribeCaption" data-text="Subscribe" data-caption="Your caption"></div> with HTML-escaped attribute values. data-kind="subscribe" represents a button without caption. Ordinary links remain links.
publicationNoSubstack destination as a publication name, handle, or URL, for example "AI Newsroom", "@theainewsroom", or "https://theainewsroom.substack.com". Optional when exactly one active Substack publication is connected; Narrareach selects it automatically. Required when more than one active Substack publication is connected.
scheduledForNoShared local wall-clock publishing date/time interpreted in timezone, including DST. A Z or explicit UTC offset represents an absolute instant. LinkedIn articles require at least 20 minutes of lead time.
isPaidContentNoWhether the Substack article is paid-only. Default false.
paywallMarkerNoOptional custom marker in contentHtml where the selected free preview ends; must appear exactly once. The standard {{NARRAREACH_PAYWALL}} marker is recognized without this field. Creates a native paywall and enables paid access without changing sendToNewsletter.
sendToNewsletterNoSubstack email delivery setting. Default true.
addSearchMetadataNoGenerate SEO titles, descriptions, and a Substack slug for supported article destinations. Requires article SEO access. X does not expose separate article SEO settings.
linkedinAuthorUrnNoLinkedIn personal profile or Company Page author URN belonging to the connected LinkedIn Articles account.
platformSchedulesNoOptional per-platform overrides taking precedence over scheduledFor. Same wall-clock + timezone rule applies to each scheduledFor here; LinkedIn entries require at least 20 minutes of lead time.
mediumPublicationIdNoOptional authorized Medium publication id when platforms includes MEDIUM. Absent means the personal profile. Writer-only access submits for editorial review and leaves the story unscheduled until acceptance. Explicit publication rejection allows personal-profile delivery with a warning; ambiguous submissions remain unpublished for review. Draft-only delivery does not submit to a publication.
substackConnectionIdNoLegacy internal Substack connection identifier retained for backward compatibility; publication is the public destination selector.
linkedinNewsletterUrnNoLinkedIn newsletter URN belonging to the connected LinkedIn Articles account. Required when linkedinPublicationType is newsletter.
mediumNotifyFollowersNoWhether to email Medium subscribers about this story. Only valid when platforms includes MEDIUM. Defaults to false (no email). Best-effort: a failure to apply this setting never blocks the publish/schedule and is reported as a warning.
linkedinPublicationTypeNoLinkedIn destination type. Defaults to an individual article; newsletter represents a user-selected newsletter destination.
linkedinShareCommentaryNoOptional LinkedIn share text used when publishing a LinkedIn article.

Output Schema

ParametersJSON Schema
NameRequiredDescription
countYes
postsYes
warningsYes
advisoriesNo
createdDraftYes
connectedAccountNo
substackPublicationYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations cover the safety profile (not read-only, not idempotent, open world), and the description adds real behavioral context beyond them: draft creation vs. scheduling an existing draft, Substack-only paywall/subscribe markup behavior, and the LinkedIn session-sync fallback that silently saves as a draft. It does not discuss retry/rate semantics, hence not a 5.

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?

Purpose and primary mode selection are front-loaded, and each sentence carries distinct information (draft creation, media/paywall rules, LinkedIn caveat, return advisories). It is dense but not padded; a slightly tighter grouping of the Substack paywall sentences would earn a 5.

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 23-parameter multi-destination tool, the description covers the cross-cutting behaviors an agent needs (draft-vs-schedule branch, destination constraints, degradation paths) and an output schema handles return values. It omits guidance on which sibling to use for amending or cancelling already-scheduled items, leaving a small gap.

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 description coverage is 96%, so the schema already documents nearly every parameter in depth; the baseline is 3. The description's parameter-level statements (media/video requires Substack as sole platform, paywall markers create native paywalls, audience/email governed by supplied fields) largely restate schema text rather than adding new interpretation.

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?

Opens with a specific verb+resource+destination scope ('Schedule an article to Substack, Medium, LinkedIn Articles, or X') and immediately states the draft-creation behavior. An agent can distinguish it from schedule_note, create_draft, and reschedule_scheduled_item 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?

Gives clear situational context: draftId absent means a new draft is created, LinkedIn Articles needs a separate browser-session connection, and a pending session sync degrades to draft-without-scheduling. It does not name sibling alternatives (e.g. amend_scheduled_item, reschedule_scheduled_item) for when-not scenarios, so it stops short of a 5.

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

schedule_noteSchedule noteAInspect

Schedule a note to Substack, LinkedIn, X, Bluesky, Threads, or any combination. Creates a note draft when draftId is absent. Character limits: Bluesky 300, Threads 500, LinkedIn 3000, X 25000 (posted as a thread). Explicit platformVersions must fit their limits; otherwise overlong platform text is shortened at a sentence boundary, with adjustedPlatforms and warnings returned. Authorized team routing uses workspace and writer. Substack Notes publish from the verified connected profile, not a publication page.

ParametersJSON Schema
NameRequiredDescriptionDefault
mediaNoOptional media objects supporting image or video bytes as data URIs or base64.
titleNoUsed only when creating a new note draft.
writerNoAuthorized team writer name, handle, or id. "me" selects the linked team voice. Required when a team workspace has multiple writers.
contentNoUsed only when creating a new note draft.
draftIdNoOptional existing note draft id to schedule as-is.
timezoneNoIANA timezone the scheduledFor time above is expressed in (e.g. "Europe/London"). Default UTC.
imageUrlsNoOptional image URLs or image data URIs to attach to the scheduled note.
platformsYes
videoUrlsNoOptional video URLs or video data URIs to attach to the scheduled note.
workspaceNoAuthorized team workspace name or id for team scheduling. Absence selects the authenticated user’s personal account.
firstReplyNoOptional first reply for supported destinations. An invalid reply is omitted per platform without cancelling the root post.
publicationNoRequired when platforms includes Substack: publication name, handle, or URL selected by the user. Notes publish from the profile signed in to that connection, including publications sharing one login. Unverified or mismatched profile identity returns action_required without publishing.
scheduledForYesLocal wall-clock publishing date/time interpreted in timezone, including DST (e.g. "2026-07-01T14:30:00" means 2:30 PM). A Z or explicit UTC offset represents an absolute instant instead.
threadsTopicTagNoOptional Threads topic tag. Threads must be selected; maximum 50 characters.
platformVersionsNoOptional platform-specific text keyed by platform, e.g. { "BLUESKY": "..." }. Each supplied version must fit its limit (Bluesky 300, Threads 500, LinkedIn 3000, X 25000) or nothing is scheduled. Saved as the draft’s platform-specific version.
linkedInAccountIdNoOptional LinkedIn account id for a connected LinkedIn destination. Absence of both this field and linkedInOrganizationUrn selects the configured default.
substackConnectionIdNoLegacy internal Substack connection identifier retained for backward compatibility; publication is the public destination selector.
instagramDestinationsNoInstagram destinations with accountId from connected accounts and optional independent caption. Each account receives its own delivery receipt.
linkedInOrganizationUrnNoOptional LinkedIn Company Page URN for a connected LinkedIn destination. Requires linkedInAccountId.
confirmProfileDestinationNoDeprecated compatibility field. It is ignored and does not override Substack profile routing safety.

Output Schema

ParametersJSON Schema
NameRequiredDescription
codeNo
countNo
notesNo
statusNo
contextNo
messageNo
nextStepNo
warningsNo
firstReplyNo
sideEffectsNo
createdDraftNo
actionMessageNo
preservedDraftNo
threadsTopicTagNo
connectedAccountNo
adjustedPlatformsNo
preservedScheduleNo
confirmationPromptNo
connectionWarningsNo
linkedinDestinationNo
proposedDestinationNo
substackPublicationNo
requestedPublicationNo
requiresConfirmationNo
substackNoteDestinationNo

TDQS

A4/5.0
Behavior5/5

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

Goes well beyond the annotations (which only declare non-readonly, open-world, non-idempotent, non-destructive) by disclosing character limits per platform, the sentence-boundary truncation behavior with adjustedPlatforms and warnings in the response, the all-or-nothing rule for explicit platformVersions, and Substack profile-routing safety that can return action_required without publishing. These are non-obvious side effects an agent must anticipate.

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?

Purpose is front-loaded in the first sentence and the remainder is information-dense rather than padded. Some sentences are long and pack multiple constraints (character limits plus truncation plus routing rules) that would read better as a short list, but there is little actual waste.

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 20-parameter, nested-object tool with an output schema, the description covers the high-risk behaviors (draft-vs-draftId path, platform limits, truncation reporting, Substack identity failures) that the schema alone would not convey. It leaves media attachment and Instagram destination handling entirely to the schema, which is a minor remaining gap.

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 already 95%, so the baseline is 3, but the description adds genuine meaning: platform-specific limits tied to platformVersions, team routing via workspace/writer, and the Substack publication/profile requirement. It does not cover media, imageUrls/videoUrls, or instagramDestinations, so it is not exhaustive.

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 and resource ('Schedule a note') plus the exact set of target platforms, so the agent knows precisely what the tool does. It distinguishes implicitly from the sibling 'schedule_article' by using 'note', but never names or contrasts siblings explicitly, keeping it below a 5.

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?

Gives useful conditional context — 'Creates a note draft when draftId is absent' and 'Authorized team routing uses workspace and writer' — which helps the agent pick the right call shape. However, it never states when to prefer this tool over siblings like schedule_article or create_draft, nor any explicit exclusions.

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

update_draftUpdate draftA
Destructive
Inspect

Update an unscheduled draft. Only the provided fields are changed. Cannot edit drafts owned by other users. An active scheduled Article must be cancelled or amended through a provider-safe schedule workflow; changing its local draft would not reliably update the provider copy.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesDraft id.
titleNoNew title.
coverImageNoAttach or replace an article cover using a public URL, data URI, or base64 image bytes. Protected source hosts may reject URL ingestion.
contentHtmlNoNew HTML body.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
titleYes
updatedAtYes
connectedAccountNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=false, and readOnlyHint=false, so the mutation profile is covered. The description adds genuine context beyond that: it is a partial/patch update ('only the provided fields are changed'), it enforces an ownership boundary, and it warns that editing a scheduled item's local draft won't propagate to the provider.

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?

Three sentences, front-loaded with the core action and constraint, each earning its place. It is slightly dense in the last sentence but not 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?

An output schema exists so return values need not be explained, and the description covers scope, ownership, and the scheduling hazard. What remains unstated is the exact replacement workflow/tool for scheduled items, but overall it is complete enough to call correctly.

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 description coverage is 100%, including nested coverImage fields, so the schema carries parameter meaning and baseline 3 applies. The description adds patch semantics ('only the provided fields are changed') but no per-field detail beyond the schema.

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+resource ('Update an unscheduled draft') and immediately scopes it away from scheduled Articles, which is exactly the ambiguity that separates it from amend_scheduled_item and cancel_scheduled_item. The agent can select the right sibling without opening schemas.

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?

Explicitly says when NOT to use it (active scheduled Articles must go through a provider-safe schedule workflow) and states an ownership precondition. It stops short of naming the exact alternative tool (amend_scheduled_item) to use instead, so it is strong but not fully routing.

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

update_reader_activityUpdate reader activityC
DestructiveIdempotent
Inspect

Move an owned reader activity item to Inbox or History.

ParametersJSON Schema
NameRequiredDescriptionDefault
activityIdYes
triageStateYes
substackConnectionIdNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
successYes
triageStateYes
connectedAccountNo

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false, destructiveHint=true, idempotentHint=true, and openWorldHint=false, so the safety profile is covered. The description only adds the 'owned' ownership qualifier and the destination names; it does not explain the consequence of a destructive 'move to History' or whether the change is reversible.

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 wasted words. It is efficient, though it leans toward under-specification rather than economy.

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 mutation with an output schema available, the description should at least clarify the effect of the state change and the third parameter. With 0% schema coverage and no usage guidance, an agent lacks enough to call this 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 carry the load and does not. It implies the activityId (owned reader activity item) and the triageState destinations (Inbox/History), but gives no format for activityId and never mentions substackConnectionId at all.

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 (move), a specific resource (owned reader activity item), and the destination states (Inbox or History). It is clear enough to distinguish from list_reader_activities and reply_to_reader_activity, though it never names or explicitly contrasts those siblings.

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?

No when-to-use guidance, no prerequisites, and no mention of alternatives such as list_reader_activities or reply_to_reader_activity. The agent must infer the use case entirely from the name.

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

upload_mediaUpload mediaAInspect

Upload one image or video for later scheduling from a public HTTPS URL, data URI, or base64 bytes. URL ingestion depends on the source host allowing automated access. Returns a public media URL. API documentation: https://www.narrareach.com/api-docs.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoPublic HTTPS media URL.
dataNoData URI or raw base64 media bytes; blob: and file: URLs are unsupported.
kindYes
fileNameNoOptional original file name for storage diagnostics.
mimeTypeNoRequired for raw base64. Example: image/png.
sourceTypeNoOptional. Inferred from data/url when omitted.

Output Schema

ParametersJSON Schema
NameRequiredDescription
kindYes
sizeYes
sha256Yes
uploadedYes
publicUrlYes
contentTypeYes
connectedAccountNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly=false, idempotent=false, openWorld=true, destructive=false. The description adds genuinely new context beyond those: URL ingestion depends on the source host permitting automated access (an external-dependency caveat), and the call returns a public media URL. It does not, however, warn that repeat uploads are non-idempotent (duplicates), leaving one behavioral gap.

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?

Three tight sentences with zero filler; the supported ingestion modes and the host caveat are front-loaded, and the doc link is relegated to the end. Every sentence earns its place.

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

Completeness5/5

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

For a 6-parameter tool with 83% schema coverage and an output schema, the description covers ingestion modes, the external dependency risk, and the return value. Nothing an agent needs to invoke it correctly appears missing.

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 description coverage is 83%, so the baseline is 3. The description goes further by enumerating the three accepted source forms (HTTPS URL, data URI, base64 bytes) and flagging the host-access caveat, which complements the schema's per-field notes on base64/blob: limitations and mimeType requirements.

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 and resource ('Upload one image or video') plus its purpose ('for later scheduling') and the three supported ingestion modes. An agent can distinguish it from every sibling (create_draft, schedule_note, etc.) without opening a schema.

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 'for later scheduling' implies this precedes a scheduling call, giving some usage context, but it names no explicit alternative tool, no when-not conditions, and no prerequisite steps. Usage is implied rather than spelled out.

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. 33 tool updates
    • First observedamend_scheduled_item
    • First observedamend_scheduled_note_content
    • First observedarchive_draft
    • First observedcancel_scheduled_item
    • First observedcancel_scheduled_post
    • First observedcreate_article_from_note
    • First observedcreate_draft
    • First observedget_draft
    • First observedget_note
    • First observedget_platform_analytics
    • First observedget_scheduled_item_readiness
    • First observedget_stats_insights
    • First observedget_user_profile
    • First observedlist_content_versions
    • First observedlist_drafts
    • First observedlist_hashtag_sets
    • First observedlist_inspiration_posts
    • First observedlist_linkedin_article_destinations
    • First observedlist_linkedin_destinations
    • First observedlist_medium_publications
    • First observedlist_notes
    • First observedlist_reader_activities
    • First observedlist_scheduled_items
    • First observedlist_scheduled_posts
    • First observedlist_workspaces
    • First observedreply_to_reader_activity
    • First observedreschedule_scheduled_item
    • First observedsave_hashtag_sets
    • First observedschedule_article
    • First observedschedule_note
    • First observedupdate_draft
    • First observedupdate_reader_activity
    • First observedupload_media

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Enables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.
    16
    22 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Browse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources