Skip to main content
Glama

Server Details

Hosted MCP server for noticed. Exposes ~50 noticed agent capabilities (network search across GitHub + LinkedIn, missions, PRM, memory, workspace, web search, cron, ...) via two meta-tools — search + execute. Bearer-API-key auth; key minted at noticed.so/dashboard/api-keys.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
97.6% over 81 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
ChatGPT
–
Claude
–

TDQS

A3.5/5.0

Scored across 66 tools

Disambiguation4/5

Despite the large surface, the descriptions actively carve out boundaries: add_note vs add_memory vs memory_save, resolve_person vs search_people, and suggest/accept/dismiss/mark_different identity tools are each explicitly contrasted against their neighbors. A few clusters remain confusable at a glance (the seven identity-match tools, and memory_save vs add_memory), and add_profile_to_person vs move_profile_to_person vs accept_identity_match requires careful reading, but an agent can disambiguate.

Naming Consistency4/5

Overwhelmingly consistent verb_noun snake_case (create_action, delete_list, get_person, list_views, search_people, update_view). Minor deviations: noun-only names like account_status, my_profile, network_summary, and the awkward list_lists, but the convention stays readable and predictable.

Tool Count2/5

66 tools is far past the reasonable band for a single MCP server, and several clusters (7 identity tools, 5 list-suggestion/membership tools, 4 scheduled-task tools, 4 view tools) could be collapsed into fewer parameterized tools. The breadth is real, but this surface forces an agent to scan a very large catalog for each request.

Completeness4/5

Coverage is unusually thorough: full lifecycle for people, lists, views, actions, intros, identity matches, research runs, scheduled tasks, sharing, and network summaries. Minor gaps remain — memories and notes can be written and read but have no update/delete counterparts, and there is no hard delete for a person (only remove_from_network's soft archive).

Available Tools

66 tools
accept_identity_matchA
Destructive
Inspect

Accept a PENDING identity match — merge the two records into one. Identify it by candidate_id, OR person_a + person_b, OR profile_a + profile_b (the profile pair from a review-queue row — use this for the email→person queue where candidate_id is null). The target/first record survives; your own person always survives. REVERSIBLE (an admin can undo it). If noticed has evidence the two may be DIFFERENT people it does NOT merge — it returns a needs-confirmation result with the conflicting evidence + a confirmation_token; relay the human-readable evidence without mentioning tokens or override mechanics, and only if the user still wants to merge, call again passing the token back (never pre-set it). A verified-sign-in conflict is admin-only.

NameRequiredDescriptionDefault
person_aNopersons.id — alternative to candidate_id; pass with person_b.
person_bNopersons.id — pass with person_a.
profile_aNoSource-prefixed profile id (e.g. email:a@b.com) — the profile_a from a pending review-queue row. Use for the email→person review queue (candidate_id null, one side has no person). Pass with profile_b.
profile_bNoSource-prefixed profile id (e.g. github:123) — the profile_b from list_identity_matches. Pass with profile_a.
candidate_idNomerge_candidates id of a pending match (the candidate_id from list_identity_matches).
confirmation_tokenNoReturned BY a needs-confirmation response. Pass it back to merge anyway, only after the user reviewed the evidence. Cannot be guessed/pre-set.

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false. The description adds significant behavioral context: it clarifies the target/first record survives and the user's own person always survives, notes reversibility (admin can undo), and explains the needs-confirmation response with a token, including the instruction not to pre-set the token. These details go well 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.

Conciseness4/5

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

The description is long but information-dense, with the core purpose and identification options up front, followed by behavioral caveats. Every sentence contributes meaningful guidance, but the density makes it slightly harder to parse quickly. It is well-structured overall.

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 complex merge operation with a destructive hint, the description covers all essential aspects: identification methods, survival rules, reversibility, the confirmation flow with token, and the admin-only restriction for verified sign-ins. The output schema exists, so return values need not be explained. Nothing critical 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 schema covers 100% of parameters, but the description adds valuable usage semantics: which combination of parameters to use (candidate_id vs person_a+b vs profile_a+b), that profile_a+b is for the email→person queue where candidate_id is null, and the confirmation_token usage. This enhances the schema descriptions rather than simply repeating them.

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

Purpose5/5

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

The description states the verb 'Accept' and the resource 'a PENDING identity match' with the outcome 'merge the two records into one'. It clearly differentiates from sibling tools like dismiss_identity_match (reject) and mark_different_people (mark as different) by specifying the merge action.

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 explains when to use it (for a pending match), how to identify the match (candidate_id, person_a+b, or profile_a+b with a note on which queue), and the confirmation flow when conflicting evidence exists. It also mentions admin-only for verified-sign-in conflicts. It does not explicitly name sibling alternatives like dismiss_identity_match, but the context is clear enough.

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

accept_list_suggestionA
Destructive
Inspect

Accept one pending add/remove suggestion for a list. A suggested add becomes a member; a suggested removal is removed.

NameRequiredDescriptionDefault
list_idNoThe list id. Pass this OR list_name.
list_nameNoThe list name, matched case-insensitively. Pass this OR list_id.
person_idYesThe person id on the pending suggestion.

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

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 and idempotentHint=false, so mutability is covered. The description adds behavioral clarity by specifying the effect: 'A suggested add becomes a member; a suggested removal is removed.' This goes beyond annotations by clarifying the actual outcome of the operation, which is useful context for the agent.

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

Conciseness5/5

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

The description is two sentences with no redundancy. It leads with the core purpose, then clarifies the two possible outcomes. Every word earns its place; it is concise and well-structured.

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?

Given the tool's simplicity, the output schema (which defines return values), and the annotations covering safety, the description is complete. It covers the action, the scope ('one pending'), and the result. There is no missing information needed to call the tool 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% for all three parameters (list_id, list_name, person_id) with explanations for each. The description does not add any parameter-specific guidance beyond what the schema already states. Since the schema fully documents the parameters, the baseline of 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 clearly states the action: 'Accept one pending add/remove suggestion for a list.' It specifies the resource (a pending suggestion on a list) and distinguishes the outcome for adds vs. removals. This differentiates it from sibling tools like reject_list_suggestion, add_to_list, and remove_from_list by focusing on accepting a suggestion rather than directly modifying membership or rejecting.

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

Usage Guidelines3/5

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

The description implies usage context: it is for accepting pending suggestions on a list. However, it does not explicitly name alternatives or provide when-not-to-use guidance. For instance, it does not mention that reject_list_suggestion should be used instead to decline, or that add_to_list/remove_from_list are for direct actions. The guidance is adequate but not explicit about exclusions.

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

account_statusA
Read-onlyIdempotent
Inspect

Check connected accounts across the noticed browser extension and native iOS embedded-browser sessions. Use this to see whether GitHub and LinkedIn are connected, and whether LinkedIn and X imports are pairing, syncing, synced, partially synced, or need attention. Also lists your Teams (team_id, name, role, your share scope, member count) — the team_id to pass for scope:'team' reads.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare this a safe, idempotent, non-destructive, closed-world read, so the description's main added value is enumerating the status vocabulary (pairing, syncing, synced, partially synced, need attention) and the platform scope of the check. That is genuinely useful, but it says nothing about staleness of the status, what triggers a re-check, or any auth prerequisites for seeing session-based data.

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 purpose, then the status dimension, then the Teams payload. Dense but each sentence carries information; the only slack is the slightly rambling status list and the 'noticed' phrasing that adds nothing.

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 parameterless read tool with an output schema and full annotation coverage, the description is close to self-sufficient: it frames the scope, the domain of results, and one cross-tool usage of the returned data. The one meaningful omission is disambiguation against the near-duplicate sibling get_connected_source_status.

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?

With zero parameters, the baseline is 4, and the description does a bit extra by explaining that the returned team_id is the value to supply elsewhere for scope:'team' reads, which ties this tool's output to other tools' parameters. No input semantics are needed here, so there is no gap to compensate for.

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 names a specific resource (connected accounts across the browser extension and iOS embedded-browser sessions) and enumerates what it reports: GitHub/LinkedIn connection state, LinkedIn/X import states, and a Teams listing. It is clear what the tool returns, but it never distinguishes itself from the very similarly named sibling get_connected_source_status, 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 Guidelines4/5

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

It gives explicit usage framing ('Use this to see whether GitHub and LinkedIn are connected...') and adds a downstream purpose note that the returned team_id is what to pass for scope:'team' reads. It stops short of any exclusion guidance, so the overlap with get_connected_source_status and sync_connected_source is left unresolved.

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

add_memoryAInspect

Save a MEMORY about a SPECIFIC person — something YOU worked out on your own, unprompted, that the user never told you (a pattern you spotted, a fact you inferred from their calendar or email). If the user ASKED you to remember it, it's their note, not your memory — use add_note. @mention a name in content to link someone in your network. Read them back via get_person (relationship.memories). For a general fact not about one person, use memory_save instead.

NameRequiredDescriptionDefault
tagsNoOptional tags.
contentYesThe memory. @mention a name in your network to link them.
person_idYesThe person this memory is about.
occurred_atNoThe date this memory REFERS to, if different from now (ISO timestamp). Omit to anchor to write time. Use when recording a past event, e.g. 'met at conference last week'.
captured_viaNoThe skill capturing this — pass the active skill's slug (e.g. 'research-person', 'add-person') when a skill is driving the write; omit for an ad-hoc memory.

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=false), so the description's job is to add context and it does: it defines the epistemic bar for a valid memory and states that @mentioning links a person in the network. It doesn't warn that a non-idempotent write may create duplicate memories on retry, which would be the one remaining behavior worth disclosing.

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 sentences, front-loaded with the defining constraint, then disambiguation, then the linking mechanic, then the read-back path — no filler. The ALL-CAPS emphasis is heavy-handed but each sentence carries a distinct routing or behavioral fact.

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 5-parameter write tool with full schema coverage, an output schema, and supporting annotations, the description supplies the missing piece — the judgment call about what counts as this agent's memory versus a user note. Only the retry/duplication behavior of a non-idempotent write is left unstated.

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 schema already documents person_id, content, tags, occurred_at, and captured_via. The description only adds the @mention linking behavior for content, which is largely duplicated in the schema's own content description, and says nothing about occurred_at or captured_via. Baseline 3 is appropriate when the schema carries the parameter burden.

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 ('Save a MEMORY') and immediately narrows scope to 'a SPECIFIC person' and to information the agent inferred rather than was told. The negative definition ('something YOU worked out on your own, unprompted, that the user never told you') distinguishes it from add_note and memory_save without requiring schema inspection.

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?

Gives explicit routing rules both ways: if the user asked you to remember it, use add_note; if the fact isn't about one person, use memory_save. It also names the read path (get_person, relationship.memories) so the agent knows this tool is write-only in the workflow.

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

add_noteAInspect

Write a NOTE on a person's record — content the USER gave you. Use this whenever they ask you to remember, note, or jot something down about someone ("remember Rita prefers async", "note that Ana is hiring"), or when you're transcribing what they told you. The note is theirs; you're just the keyboard. If YOU worked something out on your own that they never told you, that's a memory — use add_memory. @mention a name in content to link someone in your network. Read them back via get_person (relationship.notes).

NameRequiredDescriptionDefault
tagsNoOptional tags.
contentYesThe note, in the user's words. @mention a name in your network to link them.
person_idYesThe person this note is about.
occurred_atNoThe date this note REFERS to, if different from now (ISO timestamp). Omit to anchor to write time. Use when recording a past event, e.g. 'met at conference last week'.
captured_viaNoThe skill capturing this — pass the active skill's slug (e.g. 'add-person', 'event-debrief') when a skill is driving the write; omit for an ad-hoc note.

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare this is a non-read-only, non-destructive, non-idempotent write. The description adds genuinely useful behavior beyond that: the note is attributed to the user, @mention syntax in content creates network links, and notes are retrievable through get_person. It does not warn about duplicate notes from repeated calls (consistent with idempotentHint=false) or mention any permission requirements, which keeps it short of 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?

Front-loaded with the core action, then triggers, then the exclusion, then linking and read-back — a sensible order. Slightly padded by rhetorical phrasing ("The note is theirs; you're just the keyboard"), though that line does convey the authorship constraint.

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 5-parameter write tool with full schema coverage and an output schema, the description covers selection criteria, the sibling exclusion, the linking mechanism and the retrieval path. Nothing needed to call it correctly is missing.

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%, so person_id, content, occurred_at, captured_via and tags are already documented in the schema. The description's only parameter-adjacent content, @mention linking in `content`, duplicates the schema text verbatim, and it says nothing about occurred_at or captured_via. 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 and resource ("Write a NOTE on a person's record") and immediately qualifies the content as user-supplied. It explicitly distinguishes itself from the closest sibling, add_memory, so an agent can route without opening either schema.

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?

Gives concrete trigger conditions with quoted example utterances ("remember Rita prefers async", "note that Ana is hiring"), an explicit negative case (self-inferred facts go to add_memory), and the read-back path via get_person (relationship.notes). Both when-to-use and when-not-to-use are covered.

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

add_profile_to_personA
Destructive
Inspect

Give noticed a LinkedIn or GitHub URL for a contact missing a profile (an email-only person from list_profile_gaps). Pass person_id + the url. noticed treats the URL as your assertion: it attaches the profile and starts enriching it, or, if that profile is already on another record in your network, merges the two (reversible by an admin). A profile that conflicts with verified identity evidence is rejected with an error. Use to ENRICH a thin contact — not to merge two existing records (that's accept_identity_match / suggest_identity_match).

NameRequiredDescriptionDefault
urlYesA LinkedIn (linkedin.com/in/…) OR GitHub (github.com/…) URL for that person — one or the other.
person_idYespersons.id of the contact to attach a profile to (from list_profile_gaps / search_people / get_person).

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A4.7/5.0
Behavior5/5

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

The annotations declare destructiveHint=true and idempotentHint=false without saying why; the description explains the destructive path, which is that if the URL already belongs to another record in the network, noticed merges the two records, and an admin can reverse that merge. It also documents the failure mode: a profile that conflicts with verified identity evidence is rejected with an error, and the description notes that noticed treats the URL as an assertion by the caller rather than as verified truth.

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

Conciseness5/5

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

The description is front-loaded with the action and the input, then layers on side effects and exclusions, and every sentence carries information you cannot get from the schema or annotations. The parentheticals are dense but they orient the reader rather than padding the text.

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 two-parameter mutation tool with complete annotations and an output schema, the definition covers the remaining unknowns: what happens on success, the merge side effect, reversibility, and the rejection condition. Nothing an agent needs in order to decide whether to call it, or to call it correctly, is missing.

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%: both parameters are documented, including the accepted URL formats and where person_id comes from. The description adds only the semantic framing that the URL is treated as an assertion, not a proof of identity, but it adds no format or edge-case detail beyond the schema, so the baseline of 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 and resource ('Give noticed a LinkedIn or GitHub URL for a contact missing a profile') and explicitly states the scope: attaching a profile to a thin contact, not merging two existing records. It names the sibling tools that do the other job (accept_identity_match / suggest_identity_match), so an agent can tell the two apart 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 Guidelines5/5

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

The description says explicitly when to use the tool: for a contact that is missing a profile, typically an email-only person surfaced by list_profile_gaps, and it says which parameters to pass. It also gives the exclusion ('not to merge two existing records') and routes the agent to the correct alternatives, which is stronger guidance than most definitions provide.

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

add_to_listA
Idempotent
Inspect

Put a person on a list. Idempotent, and it also confirms them if noticed had merely suggested them. Identify the list by list_id or list_name, and the person by person_id (from search_people / resolve_person).

NameRequiredDescriptionDefault
list_idNoThe list's id (from list_lists / create_list). Pass this OR list_name.
list_nameNoThe list's name, matched case-insensitively. Pass this OR list_id.
person_idYesThe person's id (from search_people / resolve_person / get_person).

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A4.4/5.0
Behavior4/5

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

The description discloses idempotency and the confirmation side-effect, which goes beyond the annotations (idempotentHint: true). It adds valuable behavioral details that are not obvious from the tool name or schema. However, it doesn't mention error cases or authorization requirements, but given the annotations already cover readOnlyHint and destructiveHint, this is sufficient.

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

Conciseness5/5

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

The description is concise: two sentences that front-load the core action and the key side-effects (idempotent, confirmation) before parameter selection details. Every sentence adds value, and there is no fluff.

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?

Given the availability of output schema and full parameter documentation, the description is well-rounded. It covers the core behavior, side-effects, and parameter selection logic. It could mention what happens if the list is not found, but that is a minor gap given the schema and the existence of list_lists for reference. The description is complete enough for an agent to call this tool 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?

The schema coverage is 100%, describing each parameter and its source. The description adds the clarification that list_id and list_name are mutually exclusive alternatives ('Pass this OR list_name'). This adds meaning beyond the schema descriptions, which already are detailed. The description doesn't add anything about person_id beyond what the schema says, but the schema is sufficient, so a baseline of 3 is 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?

The description clearly states the action ('Put a person on a list') with a specific verb and resource, and distinguishes it from alternatives like remove_from_list and accept_list_suggestion. It also notes the idempotent behavior and the confirmation side-effect, which is a clear differentiator from similarly named tools.

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?

Explicitly says to identify the list by list_id or list_name, and the person by person_id from specific source tools (search_people/resolve_person). While it doesn't explicitly say when not to use it, the clear mention of alternatives (e.g., accept_list_suggestion) and the confirmation behavior provides strong usage context. The description implies that if a person is merely suggested, this tool confirms them, which guides the agent on when to use this versus accept_list_suggestion.

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

add_to_networkA
Idempotent
Inspect

Add someone to your network. Known (e.g. a search_people hit) → tracked; new → created/imported + tracked. Accepts person_id OR free_form:{name,…} + optional tags and relationship_types (how you know them — set it right here at add time, no follow-up update_person needed). Returns canonical person_id. DEDUPE: a new free_form contact that strongly matches someone you already have returns { created:false, potential_duplicates, confirmation_token } instead of creating — track the existing person, or re-call with the confirmation_token only if it's genuinely someone new. relationship_types passed on a call that returns potential_duplicates are NOT kept — re-supply them on the follow-up call.

NameRequiredDescriptionDefault
tagsNoInitial tags to apply. Prefer an existing tag from your network over coining a near-duplicate (reuse `sf`, don't add `san-francisco`); lowercase, and use the event:/place:/topic: namespaces where they fit.
free_formNoA brand-new contact to create + track. Use when there is no person_id.
person_idNoperson_id of an existing search_people hit to start tracking.
custom_nameNoYour own display name for this person.
confirmation_tokenNoFrom a prior potential_duplicates response — pass it back to create despite the flagged duplicates (only after the user confirms it's a new person).
relationship_typesNoHow you know this person, from the closed set: family, close_friend, friend, acquaintance, coworker, alumni, customer, vendor, advisor, investor. Values outside this set are dropped. Coworker and Alumni may be inferred from reliable shared history; all other roles require an explicit user statement. Set it here at add time — no follow-up update_person needed.

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations establish the safety profile (not read-only, not destructive, idempotent), and the description adds substantial behavior on top: the dedupe short-circuit returns `{ created:false, potential_duplicates, confirmation_token }` instead of creating, and relationship_types supplied on a dedupe-flagged call are discarded and must be re-supplied. Those are non-obvious side effects an agent would otherwise stumble into.

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 definition is front-loaded and dense with zero filler sentences — the known-vs-new rule comes first, then the dedupe caveat, which is the right priority order. It loses a point for repetition: "set it right here at add time, no follow-up update_person needed" appears in both the description and the relationship_types schema text, and the DEDUPE block is written in compressed shorthand that takes a second read.

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 mutation tool with six optional parameters, a nested free_form object, and an output schema, the description covers the things an agent must know before calling: which identity path to take, what dedupe returns, and how to recover from it. Return-value shape is delegated correctly to the output schema.

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 100%, so the baseline is 3, but the description adds real semantics the schema cannot express: person_id and free_form are described as mutually exclusive alternatives ("Accepts person_id OR free_form"), which the schema's flat additionalProperties:false does not enforce or communicate. It also clarifies that relationship_types is set at add time and saved without a second call, though it largely restates the closed-set rule already documented in 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?

"Add someone to your network" states a specific verb and resource, and the description immediately splits the operation into two concrete modes: known person (person_id → tracked) and new person (free_form → created/imported + tracked). That two-path framing tells an agent exactly what the tool does and how it differs from siblings like update_person or search_people.

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 rules: use person_id when you have a search_people hit, use free_form when there is no person_id, and set relationship_types at add time rather than follow-up with update_person. It also states the when-not path for creation — if you get potential_duplicates, track the existing person instead of re-calling, and only re-call with confirmation_token after user confirmation.

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

cancel_researchA
Idempotent
Inspect

Cancel a research run and descendants while preserving already committed findings.

NameRequiredDescriptionDefault
run_idYes

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A3.6/5.0
Behavior4/5

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

The annotations already declare idempotentHint=true, destructiveHint=false, and readOnlyHint=false, but the description adds genuinely new behavioral context the annotations cannot convey: cancellation cascades to descendant runs while already committed findings are preserved. It still omits what happens to in-flight or partial (uncommitted) work, which is the main open question for a cancel operation.

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 sentence with zero waste, front-loading the action and immediately qualifying the scope and data-preservation behavior. Nothing redundant with the title or annotations.

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

Completeness4/5

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

An output schema exists, so return values need not be described, and annotations cover the safety profile; the description supplies the cascade and preservation semantics that structured fields lack. It is largely complete for a one-parameter tool, with only the handling of uncommitted work left unspecified.

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?

One parameter (run_id, uuid) with 0% schema description coverage, so the description must carry the semantics; it does not explain run_id explicitly, though the name makes its meaning inferable. With only a single self-evident identifier, the gap is minor, landing at the minimum-viable level rather than the 0-parameter baseline.

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 (cancel) and resource (a research run, plus its descendants), which is clearly distinct from research_person, research_status, and submit_enrichment_research. It stops short of naming the sibling you would use to inspect a run before cancelling, so sibling differentiation is implied rather than explicit.

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

Usage Guidelines2/5

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

The description never says when to cancel versus checking status with research_status first, nor what preconditions apply (e.g. must the run be in-progress). An agent can infer the basic intent from the verb, but there are no exclusions or alternatives offered.

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

complete_actionA
Idempotent
Inspect

Mark a follow-up / action done. Get the action_id from get_person (relationship.actions) or list_actions.

NameRequiredDescriptionDefault
action_idYesThe action to complete.

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A3.7/5.0
Behavior3/5

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

The annotations already cover the behavioral profile: readOnly=false, idempotent=true, destructive=false, and openWorld=false. The description adds no behavior beyond that; it does not say whether completion records a timestamp, whether it can be undone, or what happens when the action is already done. Given the rich annotation set, a 3 is appropriate, but this description is not a strong example of added context.

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

Conciseness5/5

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

Two short sentences with zero filler. The action purpose is front-loaded, and the identifier-discovery hint follows immediately.

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-parameter mutation with an output schema and a full annotation set, the description covers what is needed to select and call the tool. The only shortfall is that it does not explain the irreversibility or the post-condition of marking an action done.

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 100%, so baseline would be 3. The description nonetheless adds real value beyond the schema's bare "The action to complete" by naming the two concrete sources for action_id (get_person relationship.actions and list_actions). That provenance guidance is not in the schema.

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: "Mark a follow-up / action done". This clearly distinguishes the tool from create_action, delete_action, and update_action, which all operate on the same resource. It stops short of an explicit contrast with update_action, but the intent is unambiguous.

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

Usage Guidelines3/5

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

The usage guidance is limited to telling the agent where to obtain the action_id, via get_person (relationship.actions) or list_actions. This is practical help with the prerequisite. However, it does not say when to use this tool instead of update_action, or whether the action can be marked done only once.

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

configure_list_reviewA
Idempotent
Inspect

Configure a list's review question/context before human answers begin. Requires edit access. Identical normalized configuration is safe to retry, even after the first answer locks the question; changed locked configuration is rejected. Returns canonical_url and review_url. Does not write answers or change members.

NameRequiredDescriptionDefault
list_idNo
questionYes
list_nameNo
descriptionNo
feedback_typeNo

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, and idempotentHint=true, but the description adds valuable behavioral context beyond that: the locking mechanism ('after the first answer locks the question'), the specific idempotency condition ('Identical normalized configuration is safe to retry'), and the rejection of changed locked configuration. It also clarifies side effects by stating it does not write answers or change members. This significantly enriches the agent's understanding of the tool's behavior.

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

Conciseness5/5

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

The description is three sentences, front-loaded with purpose, then permission, idempotency, return values, and side effects. Every sentence carries essential information with no filler. The structure is logical and 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?

Given the existence of an output schema (which covers return values) and the presence of annotations, the description covers key aspects: permission, idempotency, side effects, and the return of canonical_url and review_url. The main gap is the lack of parameter explanations, but for a configuration tool with moderately self-explanatory parameter names, it is fairly complete. A slight deduction for not elaborating on feedback_type or the exact meaning of 'context'.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. However, it only vaguely mentions 'question/context' and does not explain parameters like list_id, list_name, description, or feedback_type. While some parameter names are self-explanatory, feedback_type and description could have ambiguous meanings. The description provides minimal semantic guidance for parameters beyond what the names imply, leaving the agent to guess.

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 uses a specific verb ('Configure') with a clear resource ('a list's review question/context') and a temporal scope ('before human answers begin'). It also explicitly distinguishes itself from other actions by stating what it does not do ('Does not write answers or change members'), which helps differentiate it from siblings like add_to_list or update_list.

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

Usage Guidelines4/5

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

It states when to use it ('before human answers begin') and the permission requirement ('Requires edit access'). It also explains idempotency behavior, which guides retries. However, it does not explicitly name alternative tools or say when not to use it, though the purpose is clear enough that an agent can infer appropriate usage from context.

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

correct_person_claimA
Idempotent
Inspect

Save an explicit user correction, rejection or retraction of a cited person claim, preserving its ID and revision history. Read its current revision first.

NameRequiredDescriptionDefault
valueNo
actionYes
reasonYesThe user's correction or explanation; never invent a correction on their behalf.
team_idNoOwning Team for Team knowledge; omit for personal knowledge.
claim_idYesCanonical claim ID returned by a knowledge section or memory_get.
validityNoOptional correction to the claim validity dates; retain the precision the user supplied.
rejection_scopeNoFor reject only. Default claim rejects that proposition. Use source_identity only when the user explicitly rejects ownership of the cited source or account: all its facts are excluded. Use record_identity only when the user explicitly rejects the cited record while preserving other records on that page. Never infer this narrower scope from table layout.
expected_revisionYesCurrent revision read from the claim; prevents overwriting a concurrent correction.

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare non-read-only, idempotent, non-destructive, closed-world, so the safety profile is covered. The description adds value beyond them by disclosing the append/preserve semantics ('preserving its ID and revision history') and the concurrency-protection requirement of reading the current revision first, though it says nothing about permissions or error behavior.

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. The core purpose is front-loaded and the prerequisite instruction follows immediately.

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 an output schema present, annotations covering the safety profile, and 75% schema coverage across 8 parameters (including nested validity and enum scopes), the description supplies the essentials. It could still note the personal-vs-team scope distinction (team_id) or what the corrected revision returns, but nothing critical 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?

Schema description coverage is 75%, so the baseline is 3, but the description meaningfully reinforces two parameters: it enumerates the action modes (correct/reject/retract) and ties expected_revision to a concrete retrieval step. It does not clarify value/validity/team_id semantics, which remain schema-only.

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 concrete verb-phrase and resource: saving an explicit user correction, rejection or retraction of a cited person claim. Combined with the title and the mention of claim ID and revision history, an agent can distinguish this mutation pathway from generic siblings like update_person or add_memory.

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 usage context (only for an *explicit* user correction/rejection/retraction, reinforced by the schema's 'never invent a correction on their behalf') and a prerequisite workflow step: 'Read its current revision first.' It does not name alternative tools (e.g., memory_save for new facts), so it stops short of full when/when-not guidance.

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

create_actionAInspect

Create a follow-up tied to a person — a to-do for the relationship (e.g. 'send the deck', 'intro to Ana'). In Team context, pass team_id and assigned_to to create it for any teammate against a Team-visible relationship. RECOMMENDED: include both assigned_to and remind_at whenever ownership and timing are known; neither is required. @mention a name in content to link someone in the relationship owner's network. Read open ones via get_person (relationship.actions); close them with complete_action or edit them with update_action.

NameRequiredDescriptionDefault
tagsNoOptional tags.
contentYesWhat needs doing. @mention a name in your network to link them.
team_idNoSelected Team organization id from account_status. Required with assigned_to; connected Team chats supply it automatically.
person_idYesThe person this follow-up is about.
remind_atNoRECOMMENDED date to revisit or complete this action (ISO timestamp). Omit only for genuinely open-ended work.
assigned_toNoRECOMMENDED for Team actions: exact teammate name, email, or user id. Omit only when ownership is genuinely undecided.

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A5/5.0
Behavior5/5

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

Annotations only indicate non-readOnly, non-idempotent, non-destructive hints. The description adds substantial behavioral context beyond that: it explains the @mention linking mechanism, the Team-visible relationship nuance, and the semantics of recommended optional fields (assigned_to, remind_at). It effectively communicates the side effects and constraints of the operation without contradicting any 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?

The description is front-loaded with the core purpose, then progressively covers team context, recommendations, and alternative actions. Every sentence adds essential information—there is no filler. The structured flow makes it easy to parse and act on, and the final sentence routes to related tools seamlessly.

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?

Despite the tool's moderate complexity (6 params, multiple contexts, sibling interactions), the description covers the full invocation surface: what it creates, how to use it in Team vs. personal context, which options are recommended vs. optional, how @mentions work, and how to handle the created action afterward (read/close/edit). The output schema exists, so return values need no explanation. Nothing an agent needs to call it correctly is missing.

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

Parameters5/5

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

All parameters already have schema descriptions (100% coverage), but the description enriches them meaningfully. It clarifies the relationship between team_id and assigned_to ('Required with assigned_to; connected Team chats supply it automatically'), defines the @mention behavior in content, and marks remind_at as 'RECOMMENDED' with a categorical reason ('Omit only for genuinely open-ended work'). This goes well 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?

The description opens with a specific verb+resource: 'Create a follow-up tied to a person — a to-do for the relationship.' It clearly distinguishes this tool from siblings by naming complete_action and update_action for closing and editing, and it gives concrete examples ('send the deck', 'intro to Ana'). The purpose is unmistakable.

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?

The description provides explicit guidance on when to use this tool and when to use alternatives: 'Read open ones via get_person', 'close them with complete_action or edit them with update_action.' It also covers the Team context condition (when to pass team_id and assigned_to) and recommends when to include certain fields, leaving no ambiguity about the decision process.

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

create_listAInspect

Create a list — a described set of people (e.g. 'Seed investors', 'Design candidates'). The description is REQUIRED and is the goal noticed matches people against, so write it specifically ('pre-seed investors who back dev tools in Europe'): AI suggestions are off by default. Set ai_enabled=true to have noticed propose people from the network to add, which the user confirms or rejects. The title is auto-generated from the description unless you pass a name. Returns the new list_id.

NameRequiredDescriptionDefault
nameNoShort title for the list; auto-generated from the description when omitted.
ai_enabledNoWhether noticed suggests people for this list (default false).
descriptionYesWhat the list is FOR, in the user's words — the goal noticed matches people against. REQUIRED. Be specific; a vague description means vague suggestions.
organization_idNoCreates a TEAM list owned by that Team (its team_id from account_status.teams). Omit for a personal list.

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare this is a non-readonly, non-destructive, non-idempotent, closed-world creation call. The description adds genuine behavior beyond that: the description field is REQUIRED and drives matching quality, AI suggestions default to off, proposed people require user confirmation, and the call returns a new list_id. These are useful additions, but deletion/cleanup implications and duplicate-name behavior 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.

Conciseness4/5

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

Front-loaded with the operation and resource, then the required-description rationale, then optional behaviors, then the return value. It is dense and parenthetical but every sentence carries information; minor redundancy between the description text and schema wording on ai_enabled.

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 the brief 'Returns the new list_id' is sufficient rather than required. For a four-parameter creation tool with full schema coverage and clear annotations, the description covers the decision-relevant behavior; only cross-tool placement (list vs view) is 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 coverage is 100%, so the schema already documents all four parameters, including that name is auto-generated and organization_id omits to a personal list. The description reinforces the two key ones (description as the matching goal, ai_enabled default) but adds little semantic detail the schema does not already carry, so it sits at the baseline.

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?

Opens with a specific verb+resource ('Create a list') and immediately defines the resource as 'a described set of people', with concrete examples ('Seed investors', 'Design candidates'). It is clear against add_to_list/update_list/delete_list, though it never contrasts itself with the adjacent create_view, so full sibling differentiation is not established.

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 actionable conditions: write a specific description because it is what matching uses, and set ai_enabled=true only if you want proposed people that the user confirms or rejects. It omits guidance on when a list is preferable to a view or when to pass organization_id for team vs personal lists, so there is no explicit when-not.

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

create_scheduled_taskAInspect

Create recurring noticed agent work. Every occurrence runs the same prompt in a new noticed chat. Use an ISO future timestamp for 'at', milliseconds for 'every' (minimum 60000), or a 5-6 part cron expression for 'cron'.

NameRequiredDescriptionDefault
nameYesHuman-readable task name.
promptYes
enabledNo
timezoneNo
schedule_kindYes
schedule_valueYes

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A3.8/5.0
Behavior4/5

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

The description adds meaningful side-effect context beyond annotations: every occurrence creates a new noticed chat and runs the same prompt. It also discloses formatting constraints such as future timestamps, a 60000 ms minimum, and cron-part counts. This is helpful behavioral detail even though the annotations already indicate this is a non-read-only, non-idempotent mutation.

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

Conciseness5/5

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

The description is three sentences with no filler. It front-loads the core purpose and packs the critical schedule encoding rules into the remaining sentences, making it easy to scan and apply.

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

Completeness3/5

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

The description covers the scheduling semantics well and there is an output schema so return values do not need to be explained. Still, it does not address timezone handling, the enabled flag's default behavior, or how the three schedule kinds interact with timezone, which are meaningful gaps for a scheduled-task creation tool.

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?

With only 17% schema description coverage, the description must compensate, and it does for the most complex parameter: schedule_value. It precisely explains ISO timestamps for 'at', milliseconds for 'every', and 5-6 part cron expressions for 'cron'. However, timezone and enabled parameters receive no semantic guidance, leaving a small but notable 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 clearly states the tool creates a recurring scheduled task and specifies that each occurrence runs the same prompt in a new noticed chat, distinguishing it from update/list/delete siblings. The phrase 'noticed agent work' is somewhat jargon-heavy, which prevents 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?

The description implies this tool is for creating recurring scheduled work, but it never explicitly tells the agent when to use this tool versus update_scheduled_task or delete_scheduled_task. The schedule-format guidance is useful but is parameter-level guidance, not tool-selection guidance.

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

create_viewAInspect

Create a saved live View over a personal or Team network. Its definition stores search, filters, sort, Team-member filters, relationship types, and visible columns.

NameRequiredDescriptionDefault
nameNoShort View name; generated when omitted.
definitionYes
descriptionYesWhat this View is for.
organization_idNoTeam id for a Team View; omit for personal.

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A4.2/5.0
Behavior3/5

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

Annotations provide only false hints (readOnlyHint, idempotentHint, destructiveHint), so the description carries most of the behavioral disclosure burden. It states the view is 'saved' and 'live', implying persistence and real-time effects, but does not mention uniqueness constraints, overwrite behavior, permission requirements, or side effects. This is adequate but not comprehensive for a creation 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?

Two sentences with no fluff. The primary purpose is front-loaded in the first sentence, and the second sentence enumerates the definition's components without redundancy. Every word contributes value, making it highly efficient for an agent to parse.

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?

Given the tool's complexity (nested definition object) and that an output schema exists (so return values are handled separately), the description covers the key aspects of what the view is and what it contains. It does not detail prerequisites like team membership or naming rules, but these are partially addressed by the schema (e.g., name optional). The description is nearly complete for an agent to understand the tool's role, though a mention of when team vs personal is chosen could add clarity.

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 75% (below the high threshold), so the description should add meaning beyond the schema. It does: it lists the components of the 'definition' object (search, filters, sort, Team-member filters, relationship types, visible columns) and clarifies 'personal or Team network' for organization_id. This gives the agent a conceptual map of what the definition parameter contains, supplementing the schema's structural detail.

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 begins with a specific verb ('Create') and a clear resource ('saved live View'), then scopes it to 'personal or Team network'. It distinguishes this from sibling tools like update_view, delete_view, and get_view, making the tool's role unambiguous. The enumeration of what the definition stores further clarifies its purpose without ambiguity.

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?

The verb 'Create' and the context of a 'saved live View' clearly indicate this is for creating new views, while siblings like update_view and delete_view exist for modifications and removals. However, the description does not explicitly mention alternatives or state when not to use this tool, leaving the differentiation largely to inference.

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

delete_actionA
DestructiveIdempotent
Inspect

PERMANENTLY delete an action that should NOT exist — created by mistake, a duplicate, or no longer relevant. This is IRREVERSIBLE: it removes the row outright and does NOT stamp a completion. If the follow-up actually HAPPENED, use complete_action instead (that records it as done). Get the action_id from get_person → relationship.actions or list_actions.

NameRequiredDescriptionDefault
action_idYesThe action to permanently delete (from get_person → relationship.actions or list_actions).

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true, but the description adds critical nuance: it removes the row outright and does NOT stamp a completion, contrasting with complete_action. This behavioral detail goes beyond the annotations and prevents misuse.

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

Conciseness5/5

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

The four sentences are concise, front-load the core action, and each serves a distinct purpose: definition, irreversibility, alternative, and ID source. No fluff or redundancy.

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 single-parameter destructive tool with an output schema, the description covers all necessary information: what it does, when to use, how to obtain the ID, and the alternative. Nothing an agent needs to call it correctly is missing.

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 the schema's description for action_id already includes the source (get_person → relationship.actions or list_actions). The tool description repeats this exactly without adding new semantic information, so it adds no value 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?

The description clearly states the tool performs a permanent delete of an action, specifying the resource and operation. It distinguishes from complete_action by noting it's for actions that should not exist, making its purpose unambiguous even among 40+ sibling tools.

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 explicitly tells the agent when to use this tool (mistake, duplicate, irrelevant) and when not to (if follow-up happened, use complete_action). It also provides the source for action_id, giving complete actionable guidance.

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

delete_listA
Destructive
Inspect

Permanently delete a list and its membership/suggestion ledger. People remain in the network. Identify it by list_id or an unambiguous list_name.

NameRequiredDescriptionDefault
list_idNoThe list id. Pass this OR list_name.
list_nameNoThe list name, matched case-insensitively. Pass this OR list_id.

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false. The description adds meaningful context: it deletes 'its membership/suggestion ledger' and explicitly states 'People remain in the network'. This goes beyond the annotations by explaining what exactly is destroyed and what is preserved. No contradiction with annotations (both indicate a write/destructive operation).

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

Conciseness5/5

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

The description is three short sentences: purpose, key side-effect, and identification method. It is front-loaded with the primary action, then adds crucial non-destructive context, then parameter guidance. No filler words; every sentence 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?

The description covers the essential aspects for a delete operation: what is deleted, what is preserved, and how to identify the target. It does not mention any prerequisites like permissions or confirmation, but given the annotations already flag destructive behavior and the tool has an output schema, this is sufficient. It could have mentioned alternatives but that is not necessary for correct invocation.

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 100% and each parameter already has a description. The description adds the instruction 'unambiguous list_name', which is a useful semantic constraint not present in the schema (the schema only says 'matched case-insensitively'). It also reinforces the OR relationship between the two parameters. This adds value beyond the schema, so a score above baseline is warranted.

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

Purpose5/5

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

The description states a specific verb ('delete') and resource ('list'), and clarifies the scope: 'its membership/suggestion ledger'. This distinguishes it from other delete tools like delete_action and delete_view. It also clarifies that 'People remain in the network', which differentiates from deleting people. The purpose is unambiguous and distinct from siblings.

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?

The description gives useful context for when to use this tool: to delete a list and its ledger, while noting that people are not removed. However, it does not explicitly mention alternatives like remove_from_list for just removing a member, or reject_list_suggestion for discarding a suggestion. It implies the use case but does not explicitly route away from those alternatives. Still, it provides enough context for an agent to understand the intent.

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

delete_scheduled_taskA
Destructive
Inspect

Permanently delete one noticed agent task and its run history. Use update_scheduled_task with enabled:false to pause it instead.

NameRequiredDescriptionDefault
idYes

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A4.2/5.0
Behavior5/5

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

Annotations already flag destructiveHint:true, but the description adds important context that the deletion is permanent and that run history is also destroyed. This goes beyond what annotations alone convey and is consistent with idempotentHint:false.

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

Conciseness5/5

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

Two short sentences with no wasted words. The core action is front-loaded, and the alternative usage is provided in a compact second sentence.

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 destructive tool with annotations and an output schema, the description covers the essential facts: action, permanence, destroyed run history, and the pause alternative. The unexplained 'noticed' terminology and unstated id semantics are minor gaps, but the overall context is sufficient for safe invocation.

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 needed to explain the id parameter, but it never does. The agent must infer from the tool name that id identifies the scheduled task. The single obviously named parameter mitigates the gap, but the description still fails to explicitly add meaning beyond the schema.

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 action ('Permanently delete') on a specific resource ('one noticed agent task') and its run history, which clearly conveys what the tool does. It also distinguishes itself from update_scheduled_task by contrasting deletion with pausing. The unusual wording 'noticed agent task' is a minor blemish but does not obscure the core purpose.

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?

The description explicitly says to use update_scheduled_task with enabled:false when the goal is to pause rather than delete. This gives the agent a clear routing rule between sibling tools and specifies when not to invoke this tool.

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

delete_viewA
Destructive
Inspect

Permanently delete a saved View. This removes only the saved definition; matching people remain in the network.

NameRequiredDescriptionDefault
view_idNoThe View id. Pass this OR view_name.
view_nameNoThe View name, matched case-insensitively. Pass this OR view_id.

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A4/5.0
Behavior4/5

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

The description clarifies that the operation is non-cascading and permanent, which is critical behavioral information beyond what the annotations provide. However, it doesn't mention failure cases, return behavior, or idempotency, which would be relevant for a destructive operation.

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, dense sentences with minimal fluff. Every word contributes to the meaning, and the key qualifiers (typo: 'only') are front-loaded.

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

Completeness4/5

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

For a simple two-parameter destructive operation, the description covers the essential context needed to understand its scope and side effects. A couple of minor aspects (e.g., what happens on success, idempotency) are already covered by the presence of an output schema and the annotations, so they aren't critical gaps.

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?

The description doesn't add to the parameter-level descriptions already present in the schema, but the schema is 100% complete with descriptions like "The View id. Pass this OR view_name." and "The View name, matched case-insensitively. Pass this OR view_id." The description is largely redundant with the schema, so it adds no new parameter-level context.

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?

"Permanently delete a Saved View" provides an explicit, specific verb and resource, going beyond the title and generic name. It clearly communicates the destructive nature and the object of the operation.

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

Usage Guidelines3/5

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

The description clarifies the scope of the deletion ("only the saved definition"), but it doesn't explicitly contrast with sibling operations like update_view, create_view, or get_view. It lacks explicit 'use when' or 'use instead of' guidance, relying on the reader to infer when to choose this tool.

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

dismiss_identity_matchA
Idempotent
Inspect

Dismiss a PENDING identity match so it stops surfacing — a SOFT reject. It does NOT assert the two are different people, so noticed may re-propose the pair later. Identify it by candidate_id, OR person_a + person_b, OR profile_a + profile_b (the profile pair from a review-queue row — use this for the email→person queue). To permanently say they are NOT the same person, use mark_different_people instead.

NameRequiredDescriptionDefault
person_aNopersons.id — alternative to candidate_id; pass with person_b.
person_bNopersons.id — pass with person_a.
profile_aNoSource-prefixed profile id (e.g. email:a@b.com) — the profile_a from a pending review-queue row. Use for the email→person review queue (candidate_id null, one side has no person). Pass with profile_b.
profile_bNoSource-prefixed profile id (e.g. github:123) — the profile_b from list_identity_matches. Pass with profile_a.
candidate_idNomerge_candidates id of a pending match (the candidate_id from list_identity_matches).

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false. The description adds valuable behavioral nuance: dismissal is a soft reject, it does NOT assert the two are different people, and the system may re-propose the pair later. This goes beyond what annotations convey.

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 sentences, no filler, purpose front-loaded. The first sentence states action and effect; the second adds the key behavioral caveat; the third covers identification methods and the alternative. Every sentence 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 five optional parameters and no required fields in the schema, the description correctly explains the mutually exclusive identification methods and the review-queue scenario. It gives enough context for the soft-reject behavior and names the permanent alternative. A minor gap is not explicitly referencing accept_identity_match, but the output schema and sibling list help fill that.

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 100% and each parameter has a description, but the description adds the crucial grouping logic: one of candidate_id, person_a+person_b, or profile_a+profile_b identifies the match, with profile pairs specifically tied to the review-queue row. This compensates for the schema's misleading all-optional appearance.

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

Purpose5/5

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

The description states a specific verb ('Dismiss'), a specific resource ('PENDING identity match'), and the immediate effect ('stops surfacing'). It also characterizes the action as a SOFT reject and explicitly contrasts it with mark_different_people, making its purpose distinguishable from sibling tools.

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?

The description explicitly names mark_different_people as the correct alternative for permanent rejection and explains when to use the profile_a+profile_b form (the email→person queue). It does not explicitly mention accept_identity_match as the opposite action, but the sibling name and the 'dismiss' verb make the distinction reasonably clear.

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

enrichment_batch_statusB
Read-onlyIdempotent
Inspect

Read resumable, per-person enrichment outcomes for a 1–35-person opportunity batch before repeating any paid work.

NameRequiredDescriptionDefault
scopeNo
team_idNo
batch_idYes
person_idsYes

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuine context beyond that — results are 'resumable' and enrichment is 'paid' — but says nothing about auth requirements, rate limits, or what a partial/in-flight outcome looks like.

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 dense sentence that front-loads the verb and resource, with the cost-avoidance rationale trailing. Every clause earns its place; nothing is padded.

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 cover safety. However, for a 4-parameter tool with 0% schema coverage, the unexplained scope/team_id pair is a real gap an agent could stumble on.

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 coverage is 0%, so the description carries the full burden. It conveys the meaning of person_ids ('per-person', '1–35-person') and batch_id ('batch'), but leaves scope (the only enum, own vs team) and team_id completely unexplained in both schema and description.

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

Purpose4/5

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

States a specific verb ('Read') and resource ('resumable, per-person enrichment outcomes ... for a ... batch'), which is far more precise than a bare 'get status'. It implicitly contrasts with enrich_person (the paid work) but never names a sibling to differentiate explicitly, so it stops 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 Guidelines4/5

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

The phrase 'before repeating any paid work' gives a concrete when-to-use cue: call this to avoid re-paying for enrichment already done. It does not name enrich_person or search_enrichment_web as the alternatives it routes away from, so there is no explicit when-not guidance.

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

enrich_personB
Idempotent
Inspect

Enrich a person in your noticed network with missing or updated professional details.

NameRequiredDescriptionDefault
scopeNoUse team for a fully shared Team relationship.
team_idNoTeam id; required when you belong to multiple Teams.
batch_idNoOpportunity List id for resumable enrichment.
person_idNoAn existing noticed person to enrich.
new_personNoCreate a new own-network relationship before enrichment. Requires email or linkedin_url; not allowed with scope 'team'. Pass exactly one of person_id or new_person.
client_request_idNoStable idempotency key for creating a new relationship.
confirmation_tokenNoOnly from a needs_duplicate_confirmation response for new_person: pass it back to create the relationship despite the listed potential duplicates.

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

B3.3/5.0
Behavior3/5

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

The annotations already state this is a non-read-only, non-destructive, idempotent operation, and the description's 'missing or updated details' is consistent with that safety profile. However, it does not disclose key behaviors visible in the schema: creating a new relationship via new_person, duplicate confirmation handling, or resumable batch enrichment.

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

Conciseness5/5

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

The definition is a single front-loaded sentence with no filler. It states the action and target immediately, though its brevity contributes to gaps elsewhere.

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?

For a tool with seven parameters, nested new_person input, team scoping, duplicate confirmation, and batch resumability, the description is quite thin. The rich schema and output schema mitigate this, but the description still does not help an agent distinguish this operation from update_person or understand its creation side effect.

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 parameter meanings are already well documented in the input schema. The description adds no parameter-specific meaning beyond the schema, which is appropriate but not value-adding for this dimension.

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 ('Enrich') and resource ('a person in your noticed network') and narrows the outcome to missing or updated professional details. It is understandable without opening the schema, though it does not explicitly distinguish itself from siblings like update_person or research_person.

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 or comparison to alternatives such as update_person, research_person, or add_to_network. The phrase 'in your noticed network' implies an existing relationship, but the agent is left to infer when enrichment is the right choice.

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

get_connected_source_statusA
Read-onlyIdempotent
Inspect

Inspect noticed integration sources, their safe account labels, GitHub handle and profile URL, connection state, effective sync cadence, and latest attempt or completion. GitHub accounts include handle and profileUrl separately from the permanent numeric id; null means unknown, so never construct a profile URL from the id. Returns metadata only; use this before claiming a source is connected or current.

NameRequiredDescriptionDefault
sourceNoOptional integration source to inspect; omit for all sources.

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A3.9/5.0
Behavior4/5

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

The description discloses important behavioral details beyond the annotations: it returns metadata only, and it warns that a null GitHub handle/profileUrl means unknown and should not be derived from the numeric id. This adds value beyond the readOnlyHint, idempotentHint, and destructiveHint annotations, though it does not cover potential rate limits or authentication 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?

The description is compact and front-loaded with the primary purpose. Every sentence carries meaningful detail (e.g., the GitHub caveat, the 'metadata only' note), but it is slightly dense. Still, there is no fluff, so it earns a 4.

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 tool is simple (one optional parameter) and has an output schema, which the description does not need to explain. The description covers the key aspects: what is inspected, the special GitHub handling, and the recommended usage. It is sufficiently complete for an agent to call it correctly, though it does not describe the exact output shape (handled by the schema).

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?

The input schema already fully describes the single optional parameter ('Optional integration source to inspect; omit for all sources.'), and schema coverage is 100%. The description adds no additional parameter semantics, so the baseline of 3 is appropriate.

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 clearly states the tool's purpose: inspecting integration sources and their metadata (labels, connection state, sync cadence, etc.). It distinguishes from sync_connected_source by emphasizing it returns metadata only, but it does not explicitly name sibling tools or contrast with them, 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 Guidelines4/5

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

The description provides explicit guidance on when to use the tool ('use this before claiming a source is connected or current'), which is clear context for the agent. However, it does not mention when not to use it or suggest alternative tools, 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_instructionsA
Read-onlyIdempotent
Inspect

Returns this connector's instructions — what noticed is and how to use it. Replays the server instructions text on demand; call anytime to re-read.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
instructionsYes

TDQS

A4.3/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 fully covered. The description adds the useful context that the tool 'replays the server instructions text on demand,' but does not elaborate on response format or potential caching behavior.

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 concise sentences with no filler. The core action is front-loaded, and the secondary note about when to call is brief and useful.

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 a rich set of annotations and an output schema, the description fully covers what the tool does, what it returns, and when to use it. 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 has zero parameters, so there is no parameter semantics burden. Schema description coverage is 100% and no parameters exist, making the description sufficient without adding parameter detail.

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

Purpose5/5

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

The description states a specific verb ('Returns') and resource ('this connector's instructions'), and clarifies what the instructions contain ('what noticed is and how to use it'). It is unambiguous and does not overlap with any sibling tool.

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?

The description directly says 'call anytime to re-read,' which gives clear when-to-use guidance. It does not explicitly name alternatives or exclusions, but none are needed given the tool's self-referential purpose.

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

get_listA
Read-onlyIdempotent
Inspect

Open one list: relevance-ranked members, pending suggestions and rejected_person_ids. Returns canonical_url and review_url; a link does not imply reviews are configured. Use member_total for the size, never members.length. Continue while member_has_more with page/page_size. Identify by list_id or list_name.

NameRequiredDescriptionDefault
pageNo1-based member page; default 1.
list_idNoThe list's id (from list_lists / create_list). Pass this OR list_name.
list_nameNoThe list's name, matched case-insensitively. Pass this OR list_id.
page_sizeNoMembers per page; default 25, maximum 200.

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds valuable behavioral context beyond annotations: that review_url presence doesn't guarantee reviews are configured, that member_total is the authoritative size (not members.length), and that pagination continues while member_has_more. These details help the agent interpret results correctly.

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

Conciseness5/5

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

The description is five short, focused sentences, each adding distinct value: purpose, return fields, size caveat, pagination, and identifier choice. It is front-loaded with the primary action and contains no filler or redundant statements.

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 read-only single-list retrieval with a full output schema, the description covers all essential calling aspects: identification method, pagination pattern, return field semantics (member_total vs members.length), and the review_url caveat. The output schema handles the return structure, so nothing needed for correct invocation is missing.

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 baseline is 3. The description reinforces that list_id and list_name are alternatives (already stated in schema) and that page/page_size drive pagination, but it does not introduce new parameter constraints or syntax. It adds marginal context beyond the schema, but not enough to raise the score above baseline.

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

Purpose5/5

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

The description states a specific verb and resource: 'Open one list' and enumerates the returned contents (relevance-ranked members, pending suggestions, rejected_person_ids). It clearly distinguishes itself from list_lists (which lists multiple lists) and from update_list/delete_list (mutating) by implying a read-only single-list operation.

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

Usage Guidelines4/5

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

Provides clear guidance on how to call the tool: identify by list_id or list_name, and paginate with page/page_size while member_has_more. It also gives a caveat about using member_total for size. However, it does not explicitly contrast with sibling tools like get_list_reviews, though mentioning review_url hints at it. Overall, clear usage context without exclusions.

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

get_list_reviewsA
Read-onlyIdempotent
Inspect

Read only the authenticated user's latest Yes/No/Not sure answers and optional reasons, question/context, and accurate counts for current members. Returns setupState, reviewerUserId, reviewScope=self and review_url. Page through answers (10 per page) while hasMore is true; independently page eligible memberPersonIds while memberHasMore is true to verify the intended batch. Both use page. Counts are unfiltered; corrections replace answers, undo removes them. List membership is never approval.

NameRequiredDescriptionDefault
pageNo
answerNo
list_idNo
list_nameNo

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds valuable behavioral context: pagination semantics (10 per page, hasMore/memberHasMore), that counts are unfiltered, corrections replace answers, undo removes them, and that list membership is never approval. No contradictions with 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?

The description is efficient and front-loaded, starting with the core purpose and then adding necessary behavioral details. Each sentence adds value—pagination, counts, and the approval caveat—without redundancy. It is slightly long but appropriately so for the complexity.

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?

Given that an output schema exists, the description need not detail return values, but it still mentions key returned fields (setupState, reviewerUserId, reviewScope, review_url). It covers pagination and the dual-listing behavior (answers vs eligible memberPersonIds) thoroughly. Minor gaps remain around parameter usage (e.g., list_id vs list_name), but overall it is fairly complete for a read tool with this complexity.

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

Parameters2/5

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

Schema description coverage is 0%, so the description carries the full burden for parameter meaning. It mentions 'page' in the context of pagination and implies 'answer' as a filter, but does not explain the roles of list_id vs list_name, nor the exact filtering behavior of the 'answer' parameter. Given the 0% coverage, the description does not sufficiently compensate.

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 clearly states the tool reads the authenticated user's latest review answers and counts, using a specific verb (Read) and resource (list reviews). It distinguishes itself from sibling tools like configure_list_review by emphasizing 'read only' and 'reviewScope=self', making it unambiguous which tool to use for reading own reviews.

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

Usage Guidelines3/5

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

The description provides context on how to use the tool (pagination, verifying batches) but does not explicitly contrast it with alternatives like configure_list_review or list_lists. It implies when to use it (to read reviews) but lacks explicit 'use this instead of X' guidance, leaving some inference to the agent.

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

get_personA
Read-onlyIdempotent
Inspect

One person's unified knowledge and compact legacy record: profile (including github_login and github_url when known; team records use githubHandle and githubUrl), current role, and your relationship context (notes, tags, last interaction, added_at = when they entered your network) by default; pass include:'extras' or 'all' for work history, education, and repos. person_id:'me' for yourself. The contact section previews their emails, phones, and companies (primary first) — a person can have several of each, so read contact.emails rather than the single top-level email when the user asks for their addresses. The relationship section carries your memory of them: summary (cited), strength ({score, category}), mutuals (shared connections), actions (follow-ups — done flags completion), notes (what the user wrote or asked noticed to remember), and memories (what noticed worked out on its own). scope:'team' opens the POOLED TEAM record for a person from a team search_people hit, combined across every team you're in — who on your teams knows them + their strength, and full-consent teammates' actions/notes/interactions attributed to each member and tagged with the teams that share them. For someone in your own network, the team section adds the same teammate context (absent when no teammate knows them). Relationship types include manual/derived origin, persistent rejections, and relationship_type_evidence with shared company/university, both date ranges, overlap precision, and provenance. Legacy collections preview up to 12 items; use sections, cursors and limit for complete authorized knowledge and source histories. compared_to uses current canonical values. Section metadata distinguishes missing, unrequested and failed reads. An empty field means not recorded, NOT false.

NameRequiredDescriptionDefault
limitNoMaximum items per requested section, default 10. Follow nextCursor to retrieve the rest.
scopeNo'own' (default) — your own record. 'team' — the pooled TEAM record for a person from a team search_people hit (who knows them + full-consent teammates' notes/actions/interactions).
cursorsNoPer-section nextCursor values from the previous read; restart a section when its source version changes.
includeNo'dossier' (default, fast) · 'extras' (work history/education/repos) · 'all'.
team_idNoFor scope:'team' — one team's team_id (from account_status.teams) to read only that team's record. Omit it to combine the record across every team you're in.
sectionsNoKnowledge sections to read. Each returns a bounded page, completeness state and continuation cursor.
person_idYesThe person's id (from search_people), or the literal 'me' for yourself.
compared_toNoOptional second person_id from your own network — adds a shared_signals section. Ignored for scope:'team' records.

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A4.2/5.0
Behavior5/5

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

Annotations only cover safety (readOnly, idempotent, non-destructive) and closed-world; the description goes well beyond them, disclosing the default versus 'extras' payload split, that legacy collections preview up to 12 items, that cursors/limit are needed for complete reads, that section metadata distinguishes missing/unrequested/failed, and that an empty field means not recorded rather than false. It also explains team pooling and consent attribution and which consenting teammates' data is merged.

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?

It is front-loaded with what the default read returns, which is good, but the body runs long and spends many sentences documenting individual output fields (contact, relationship, memories, relationship_type_evidence) that an existing output schema already carries. That bulk makes it harder to scan for the actionable decisions: which scope, which include, how to page.

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 an 8-parameter, nested read with team pooling, sectioned paging and an output schema, the description covers defaults, paging behavior, empty-value semantics and scope semantics. Nothing material needed to call it 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?

Schema coverage is 100%, so a 3 is the baseline, but the description adds meaning the schema does not: compared_to is resolved against 'current canonical values', the team scope is pooled across every team unless team_id narrows it, and it warns to read contact.emails rather than the single top-level email. The include:'extras' restatement largely duplicates the schema, keeping this below a 5.

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 opens with a specific resource and its scope: 'One person's unified knowledge and compact legacy record', then enumerates the default payload (profile, current role, relationship context). It implicitly distinguishes itself from search_people by naming it as the source of person_id and from list-style siblings by emphasizing a single-person read. It stops short of a crisp verb-first statement and never explicitly contrasts with my_profile or resolve_person.

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?

Routing conditions are given for the main branches: person_id:'me' for yourself, scope:'team' only for a person from a team search_people hit, include:'extras'/'all' for work history, and compared_to ignored for team records. It does not state when NOT to use this tool or name an alternative for the same task (e.g., my_profile, research_person), so exclusions are absent.

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

get_sharingA
Read-onlyIdempotent
Inspect

Inspect general-access and publication state for a List or View. This intentionally omits collaborator grants, invitations, and comments. Pass exactly one of list_id, list_name, view_id, or view_name.

NameRequiredDescriptionDefault
list_idNoThe list id. Pass this OR list_name.
view_idNoThe View id. Pass this OR view_name.
list_nameNoThe list name, matched case-insensitively. Pass this OR list_id.
view_nameNoThe View name, matched case-insensitively. Pass this OR view_id.

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description adds real value on top by bounding the returned scope (what is deliberately omitted), which the annotations cannot convey. It doesn't discuss permissions or error behavior, keeping it at 4 rather than 5.

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, zero redundancy, with the scope statement front-loaded and the selection rule last where it is most actionable. Every sentence carries distinct information.

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?

Complexity is low, an output schema exists so return values need no prose, and the description covers purpose, scope exclusions, and the identifier selection rule. Nothing an agent needs in order to call it 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?

Schema coverage is 100%, so the baseline would be 3, but the description adds a constraint the schema does not express: exactly one of the four identifiers must be supplied, and list/view selectors cannot be mixed. That resolves a genuine ambiguity left by the empty required list and absence of a oneOf.

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") and a precisely scoped resource ("general-access and publication state for a List or View"). The wording also implicitly separates it from the mutation siblings set_general_access and set_published, so an agent can pick this for reading 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 Guidelines4/5

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

The second sentence gives an explicit exclusion set (collaborator grants, invitations, comments), which tells the agent when this tool is NOT the right choice. It stops short of naming the sibling tools that do cover those cases, so the routing guidance is clear but not fully closed.

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

get_viewA
Read-onlyIdempotent
Inspect

Open a saved View and execute it against the live personal or Team network. Returns its definition plus paginated current matches under normal Team consent rules.

NameRequiredDescriptionDefault
pageNoResult page, default 1.
view_idNoThe View id. Pass this OR view_name.
page_sizeNoRows per page, default 25.
view_nameNoThe View name, matched case-insensitively. Pass this OR view_id.

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/destructive safe; description adds consent-rule caveat and pagination behavior, which goes beyond annotation baseline. No 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?

One tight sentence that front-loads purpose and includes return behavior; zero filler.

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?

Output schema exists, so return details are covered structurally. Description covers execution scope and consent rules. Lacks error cases or prerequisites, but these are not critical for a read-only tool with strong annotations.

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 covers 100% of parameters with descriptive text. Description adds no new parameter-level meaning beyond schema, so baseline 3 is 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?

Clear verb and resource: 'Open a saved View and execute it' — distinct from list/create/update/delete siblings. Mentions live network scope and return type (definition plus paginated matches), establishing a unique purpose.

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?

States execution context (live personal or Team network) and references consent rules, but does not explicitly contrast with siblings like list_views or say when not to use it. The context is clear enough to infer, but explicit routing is absent.

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

get_voice_rulesA
Read-onlyIdempotent
Inspect

The canonical writing-voice rules for any text drafted on the user's behalf (outbound messages, intros, follow-ups, posts). Call BEFORE drafting and apply strictly — this is the single source of truth for the user's voice; do not rely on remembered or restated copies.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A4.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 well covered. The description adds the meaningful context that this is the canonical voice source and that remembered copies should not be trusted, but it does not disclose additional behavioral details such as return format or potential errors. With annotations covering the core behavior, a mid-score is appropriate.

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

Conciseness5/5

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

The description is two sentences with no filler. The first sentence states what the tool provides and its scope; the second gives clear call timing and an important warning. Every phrase earns its place and the key constraint is front-loaded.

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 no-parameter, read-only tool with an output schema and comprehensive annotations, the description is complete. It explains the purpose, scope, timing, application, and authority of the tool, leaving no critical gap for an agent to invoke it correctly.

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

Parameters4/5

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

The tool has zero parameters, and the schema description coverage is 100%, so there is nothing for the description to add about parameter meaning. The baseline for zero-parameter tools is 4, and the description appropriately focuses on usage rather than parameters.

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 clearly identifies the tool as the source of writing-voice rules for outbound messages, intros, follow-ups, and posts. It uses a specific verb ('get') and resource ('canonical writing-voice rules') and distinguishes itself from siblings like get_instructions by emphasizing it is the single source of truth for the user's voice.

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?

The description explicitly instructs when to call the tool ('BEFORE drafting') and how to apply the result ('apply strictly'). It also warns against relying on remembered or restated copies, which effectively guides the agent to always use this tool rather than cached knowledge. This is strong usage guidance for an agent.

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

list_actionsA
Read-onlyIdempotent
Inspect

Every OPEN follow-up / action across your WHOLE network in one call, each attached to the person it belongs to — ordered like /home (soonest remind_at first, undated last). scope:'team' returns consent-gated open actions across every Team you're in, attributed to their owner; pass team_id to narrow to one Team. Pass goal_id to keep only Actions for confirmed people in that Goal; a Team sweep with goal_id reads the Team that owns the Goal. Use this to sweep all your to-dos (e.g. "what are all my open actions?") instead of calling get_person per person. Pass undated:true to see only the open-ended ones (no remind_at). Optionally scope to one person_id or cap the count with limit. Snoozed actions are excluded until they resurface. Read-only — for one person's actions use get_person → relationship.actions.

NameRequiredDescriptionDefault
limitNoMax actions to return (bounded). Omit for all.
scopeNo'own' (default) — your open actions. 'team' — consent-gated open actions across a Team.
goal_idNoOnly Actions for confirmed people in this Goal (the id from list_lists/get_list). For scope:'team', the Goal must belong to the selected Team.
team_idNoFor scope:'team' — one team's team_id from account_status.teams. Omit it to read every team you're in.
undatedNoOnly actions with no remind_at (open-ended follow-ups). Omit for all open actions.
person_idNoScope to one person's open actions (their id from search_people / get_person).

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/idempotentHint, so the safety profile is covered; the description goes further by disclosing result ordering (soonest remind_at first, undated last), an exclusion rule (snoozed actions are withheld until they resurface), and that team scope is consent-gated and attributed to owners. What it does not cover is failure behavior when consent is missing or how bounded 'limit' truncation is signalled, which keeps it short of 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?

It is front-loaded with the primary use case and the result shape, then walks parameters in a logical order with no filler sentences. It is dense and long-ish for a list tool, and the team/goal interaction sentence is packed enough to require a second read, which costs it a point.

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 six-parameter, zero-required filtered list tool with a full output schema and complete annotations, the description covers scope selection, narrowing, exclusions, ordering, and the sibling alternative. Nothing an agent needs in order to call this 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?

Schema coverage is 100%, so the baseline is 3, and the description genuinely adds cross-parameter meaning the schema does not: omitting team_id reads every team, and with a Team sweep the goal_id must belong to the Team that owns the Goal. It also clarifies that goal_id filters to confirmed people only, which is a semantic constraint beyond the field's own text.

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 opens with a specific verb and resource — every open follow-up/action across the whole network — and states the shape of the result (each attached to its person). It explicitly contrasts itself with the sibling get_person, so an agent can separate the network-wide sweep from the per-person read without inspecting either schema.

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 an explicit when-to-use rule ('use this to sweep all your to-dos ... instead of calling get_person per person') and an explicit when-not with the alternative ('for one person's actions use get_person → relationship.actions'). The scope/team_id/goal_id/undated/person_id paths are each framed as conditional refinements, so the agent knows which knob selects which behavior.

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

list_identity_matchesA
Read-onlyIdempotent
Inspect

List the cross-source identity matches in your network, newest first — when each happened, the two identities that were linked (with their sources), the confidence, the reason, and the status (merged, pending review, or marked as different people). Pass person to scope to one person (matches on either side). Pass status to show only matches in that state — e.g. status='pending' for the review queue. Includes pending suggestions awaiting review. Answers "what identity matches have happened in my network?".

NameRequiredDescriptionDefault
limitNoMax rows (default 20, max 100).
personNoOptional person_id — only show matches involving this person.
statusNoOnly show matches with this status. pending = awaiting review; auto_merged = merged / auto-merge tier; accepted = a confirmed candidate; rejected = marked different / vetoed.

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already cover readOnlyHint=true and idempotentHint=true, so the description isn't needed to establish safety. It adds real behavioral context by disclosing the sort order (newest first), that pending suggestions are included by default, and the shape of the result records. Minor omissions like pagination beyond the limit parameter prevent a 5, but the disclosure is strong.

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 front-loaded with the core purpose and orders information from most to least important: purpose, result fields, parameter usage, then a mental-model summary. The closing quoted question is slightly redundant with the opening sentence but reinforces the tool's intent for an agent doing semantic matching.

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 low-complexity read-only list tool with only 3 optional parameters, an output schema, and full parameter coverage, the description leaves no meaningful gap. Ordering, defaults, filtering, and result content are all specified. Nothing an agent needs to call this 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?

Schema coverage is 100%, so baseline is 3, but the description adds meaningful value beyond the schema. The 'either side' parenthetical reveals non-obvious asymmetric matching semantics for the person parameter, and the status example ('status='pending' for the review queue') maps parameters to a concrete workflow. This is exactly the kind of behavioral nuance a schema alone wouldn't convey.

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 opens with a specific verb+resource: 'List the cross-source identity matches in your network, newest first' and goes on to detail the exact result fields (linked identities with sources, confidence, reason, status). The read semantics are immediately distinguishable from sibling mutation tools like accept_identity_match, dismiss_identity_match, and suggest_identity_match, so an agent can confidently tell this apart from every sibling.

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?

The description teaches how to use each filter ('Pass person to scope to one person (matches on either side)') and demonstrates a targeted use case ('status='pending' for the review queue'), plus clarifies the default inclusion of pending suggestions. It does not explicitly name alternatives or state when-not-to-use, but the context for scoping and filtering is unambiguous.

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

list_introsA
Read-onlyIdempotent
Inspect

The user's pending introductions — who offered, who they'll be connected to, and where each stands (waiting/ready/requested/done/dropped). Answers "what intros am I waiting on?" and "who promised to connect me to someone?".

NameRequiredDescriptionDefault
limitNoMax rows (default 50, max 200).
statusNoFilter by lifecycle status.
connector_person_idNoOnly intros offered by this person.

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A3.5/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 scope ('the user's') and the lifecycle vocabulary, but says nothing about ordering, pagination default behavior, or whether 'pending' really means all five statuses — a title/description tension worth flagging.

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 resource and its scope, followed by the questions it answers. The parenthetical status list is mild duplication of the schema enum but is cheap and readable.

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 an output schema, full parameter coverage, and strong read-only annotations, the definition supplies most of what an agent needs. The remaining gap is the missing link to track_intro and the slight ambiguity between 'pending' and a status filter that includes done/dropped.

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%, so all three parameters are documented in the schema itself; baseline 3 applies. The description only echoes the status vocabulary already in the enum and adds no meaning for connector_person_id or the limit behavior.

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 names a specific resource (the user's introductions) and enumerates what each row carries — who offered, who the connection is to, and lifecycle status. An agent can tell this is a read/list tool, though it never names the natural sibling (track_intro) to distinguish listing from creating/tracking an intro.

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 conveyed only indirectly, through the example questions ('what intros am I waiting on?', 'who promised to connect me to someone?'), which imply the right context. There is no explicit when-not guidance and no mention of track_intro as the alternative for creating or advancing an intro.

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

list_listsA
Read-onlyIdempotent
Inspect

The user's lists (personal, Team, and lists shared with them; Views are excluded — use list_views), each with its description, how many people are on it, and how many suggestions are waiting for a decision. Start here when the user names a list — it's where the list_id comes from.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A4.7/5.0
Behavior4/5

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

The annotations already establish a safe, read-only, idempotent operation, while the description adds meaningful scope and result behavior: included list types, excluded Views, membership counts, and pending-suggestion counts. It does not discuss operational details such as pagination, ordering, or freshness, so it is informative rather than exhaustive.

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 compact sentences front-load scope, exclusions, and returned metadata, then finish with actionable selection guidance. No wording merely restates the tool name or repeats the annotations.

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-argument, read-only listing operation with an output schema, the description supplies what an agent needs to select and invoke it: scope, exclusions, useful result fields, and the list_id discovery workflow. Detailed return typing can remain in the output schema, so no additional response-format explanation is necessary.

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?

There are no input parameters, so the empty schema is already complete and warrants the baseline score. The mention of list_id usefully explains the downstream value of the results, although it is not an input parameter requiring further documentation.

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?

It clearly identifies a listing operation over the user's personal, Team, and shared lists and summarizes the per-list metadata returned. The explicit Views exclusion and list_views pointer distinguish it from a close sibling.

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 an explicit entry-point rule—"Start here when the user names a list"—and explains that the practical goal is obtaining list_id. It also provides a concrete alternative by excluding Views and routing those requests to list_views.

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

list_profile_gapsA
Read-onlyIdempotent
Inspect

List the contacts in your network that are MISSING a profile — email-only people with no LinkedIn or GitHub attached (and no pending merge). These are the ones you can enrich with add_profile_to_person by giving noticed their LinkedIn/GitHub URL. Each row has person_id, name, email, and any URL already submitted (pending). Read-only.

NameRequiredDescriptionDefault
limitNoMax contacts (default 25, max 100).

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A4.2/5.0
Behavior4/5

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

The description states it's read-only and idempotent (matching annotations), and describes the output fields (person_id, name, email, any URL already submitted). It doesn't cover edge cases like no results or errors, but the annotation hints and the description together provide adequate transparency.

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?

The description is reasonably concise but includes some redundancy (e.g., repeating 'no LinkedIn or GitHub' and 'any URL already submitted') and a minor typo ('giving noticed'). It could be tightened without losing clarity, so it's slightly above average but not exceptional.

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 description fully explains what the tool returns (rows with specific fields), the criteria for inclusion, and the relationship to add_profile_to_person. Given the absence of an output schema, the description provides sufficient context for an agent to understand the tool's purpose and result. Nothing critical 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 single 'limit' parameter is described with default and max values, and the schema includes a description. Since schema coverage is 100%, baseline is 3, but the added context about the default and maximum elevates it to 4.

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 clearly states the tool lists contacts missing a profile, specifies the criteria (email-only, no LinkedIn/GitHub, no pending merge), and explicitly ties it to the add_profile_to_person tool. This distinguishes it from other list tools like list_people or list_identity_matches.

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?

The description implies usage when you need to find contacts to enrich with profiles, and mentions the companion tool add_profile_to_person. However, it doesn't explicitly discuss when not to use it or contrast with alternative listing tools, though the unique purpose makes the usage context clear.

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

list_scheduled_tasksA
Read-onlyIdempotent
Inspect

List the user's noticed agent tasks, including timing, enabled state, next and last run, and run count.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already convey read-only, non-destructive, idempotent behavior. The description adds user scoping and mentions included fields, but does not disclose additional behavioral details such as ordering, pagination, or filtering. This is acceptable but not rich; it stays safely consistent with 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?

The description is a single focused sentence that leads with the action and resource, then lists the relevant output attributes. Every part adds value and there is no redundant or filler wording.

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 parameterless, read-only listing tool with an output schema and strong annotations, the description fully covers what the tool does and what it returns. Nothing essential is missing for an agent to select and invoke it correctly.

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

Parameters4/5

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

There are zero parameters and the schema is empty, so there is little for the description to clarify. The baseline for a parameterless tool is 4, and the description adequately identifies the resource and result contents without needing to explain parameter syntax.

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 uses a specific verb ('List') with a clear resource ('the user's noticed agent tasks'), and enumerates the returned fields (timing, enabled state, next and last run, run count). It clearly identifies a read-only listing operation and is distinguishable from sibling create/update/delete task tools.

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?

The description makes the tool's context clear: list the user's tasks rather than creating, updating, or deleting them. It does not explicitly name alternatives or exclusion conditions, but the operation is unambiguous and the sibling tool set makes the intended use obvious.

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

list_viewsA
Read-onlyIdempotent
Inspect

List visible personal and Team Views, including each saved definition and effective access role. Start here when the user names a View.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and idempotentHint. The description adds detail about returning 'saved definition and effective access role', but doesn't mention side effects. It is consistent with annotations, so it adds some but not extensive behavioral info.

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 that are concise and front-load the main action. The second sentence provides usage guidance, making it 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 description covers what the tool returns (visible views with definitions and roles) and gives a usage hint. Given no parameters and a simple list operation, it seems complete, though output schema details are not described (but that's not required).

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?

There are no parameters, so schema coverage is 100% by definition. The description doesn't need to explain parameters, and the baseline of 4 is 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 it lists visible personal and Team Views with definitions and access roles, clearly distinguishing from other list_* tools for actions, lists, etc. The verb 'List' and resource 'Views' are specific.

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 'Start here when the user names a View.', which gives a clear when-to-use directive. It implies it's the appropriate first step for viewing operations, though it doesn't contrast with alternatives explicitly.

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

log_interactionAInspect

Record a touchpoint — say WHAT it was with type: 'in_person', 'call', or 'message'. Everything else is optional detail that defaults sensibly. Builds the relationship timeline and feeds recency and relationship strength. Each call appends a new event. Works on any search_people hit — if they're not in your network yet, they're added first. NOT for notes — a note about someone is a memory, so use add_memory instead.

NameRequiredDescriptionDefault
tagsNoEvent/context tags for THIS touchpoint — WHERE / WHEN you met: an event, a place, a trip (e.g. 'friendly-machines-2026', 'event:agents-day', 'berlin'). Put them here, on the interaction, not on the person — they describe the meeting, not a durable trait, and are surfaced back on the person view as aggregated context. Use update_person's tags only for lasting traits of the person.
typeYesWhat the interaction was: 'in_person' (you were physically together), 'call' (a live conversation — phone or video), or 'message' (an asynchronous written exchange).
formatNoGroup size, for in_person and call only — 'one_to_one' (default) or 'group'. A group counts for less than a 1:1. A message has no size.
channelNoWhere it happened. For a call: 'phone' (default) or 'video'. For a message: 'email' | 'linkedin' | 'x' | 'whatsapp' | 'sms'. Not used for in_person.
payloadNoOptional freeform details (e.g. { topic: 'fundraising' }).
directionNoMessages only — 'outbound' (you sent it) or 'inbound' (they sent it). Set it whenever you know; it is what lets a real back-and-forth be told apart from a message that was never answered. Omit it when you genuinely don't know: the message is still recorded and still counts, it just carries no direction verdict. Never guess. A call or an in-person meeting is a two-way event and carries no direction.
person_idYesThe person this interaction is with.
occurred_atNoWhen it HAPPENED (ISO timestamp) — resolve relative dates like 'yesterday' to a timestamp. Omit → defaults to now. Pass null only when a past interaction's date is genuinely unknown — the timeline then shows only when it was recorded.

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false), but the description adds meaningful behavior beyond them: 'Each call appends a new event' (explains the non-idempotent consequence — duplicates if re-called), the implicit network-insert side effect, and downstream effects on 'recency and relationship strength'. It stops short of describing the response or failure modes, but for a low-risk append tool this is substantial added context.

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?

Five short sentences, front-loaded with the core action and the required discriminator first, then consequences, then the precondition, then the exclusion last. Nothing is redundant with the schema and no sentence is filler.

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 8 params at full schema coverage, an output schema present, and annotations declaring the safety profile, the remaining burden on the description is purpose, side effects, and sibling routing — all of which it covers. Only the response shape and behavior on invalid person_id are unaddressed, which the output schema partly absorbs.

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 per-parameter semantics are fully carried by the schema itself. The description adds only the framing that `type` is the one thing you must decide and 'everything else is optional detail that defaults sensibly', which is mild but genuine guidance on minimal invocation. Baseline 3 is correct given the schema already documents defaults, enums, and field interactions in depth.

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 ('Record a touchpoint'), names the discriminator field (`type` with its three enum values), and explicitly distinguishes itself from the nearest sibling: 'NOT for notes ... use add_memory instead.' An agent can identify and separate this tool from add_note/add_memory 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 Guidelines5/5

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

Gives when-to-use ('Record a touchpoint'), when-not-to-use ('NOT for notes'), and the named alternative ('use add_memory instead'). It also states a precondition-free entry point ('Works on any search_people hit — if they're not in your network yet, they're added first'), so an agent knows it needn't call add_to_network first.

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

mark_different_peopleA
DestructiveIdempotent
Inspect

Mark two records as DIFFERENT people — a durable disconnect. Records that they are not the same person so noticed won't suggest (or auto-) merge them again. Reversible by an admin. Limited to 25 per day per network. Identify them by candidate_id, OR person_a + person_b, OR profile_a + profile_b (the profile pair from a review-queue row — use this to clear email→person false positives). For a soft 'not now', use dismiss_identity_match instead.

NameRequiredDescriptionDefault
person_aNopersons.id — alternative to candidate_id; pass with person_b.
person_bNopersons.id — pass with person_a.
profile_aNoSource-prefixed profile id (e.g. email:a@b.com) — the profile_a from a pending review-queue row. Use for the email→person review queue (candidate_id null, one side has no person). Pass with profile_b.
profile_bNoSource-prefixed profile id (e.g. github:123) — the profile_b from list_identity_matches. Pass with profile_a.
candidate_idNomerge_candidates id of a pending match (the candidate_id from list_identity_matches).

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A4.9/5.0
Behavior5/5

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

Goes well beyond the destructiveHint/idempotentHint annotations by disclosing that the block is durable (prevents future suggestion or auto-merge), that it is reversible by an admin, and that there is a hard limit of 25 per day per network. Those are exactly the operational facts an agent needs before invoking a destructive 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?

Front-loads the effect and durability in the first clause, then constraints, then identification modes, then the alternative tool. Every sentence carries distinct information with no restatement of the name or title.

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 destructive, non-idempotent-looking action with an output schema, the description covers effect, reversibility, rate limit, and all invocation modes, so nothing an agent needs before calling is missing. The return value is handled by the output schema and need not be described.

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 100%, so the baseline is 3, but the description adds the pairing logic the schema only implies per-field: which parameters form an alternative set and which scenario (review-queue row, candidate lookup) each set serves. It does not restate types, but it does clarify the OR structure between the five parameters.

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 ('Mark two records as DIFFERENT people') plus the resulting state ('a durable disconnect'), which no sibling in the list implies. It distinguishes itself from the soft-path sibling dismiss_identity_match and from suggest/accept variants by naming them 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?

Gives three mutually exclusive identification routes (candidate_id, person_a + person_b, profile_a + profile_b) with the condition that selects each, including the specific email→person false-positive case. It also names the explicit alternative for 'not now' (dismiss_identity_match), so when-to-use and when-not-to-use are both covered.

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

memory_getA
Read-onlyIdempotent
Inspect

Fetch a specific memory entry by id (from memory_search).

NameRequiredDescriptionDefault
idYesThe memory entry id.

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A4.1/5.0
Behavior3/5

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

The annotations already declare readOnlyHint, idempotentHint, destructiveHint, and openWorldHint, covering the safety profile. The description agrees with these annotations and adds the slight behavioral note that ids originate from memory_search, but otherwise defers to the structured data, which is acceptable given the richness of 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?

Eleven words communicate exactly what the tool does and where the id originates, with the most important action verb leading. Not a wasted word, and the provenance note 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 single-parameter tool with 100% schema coverage, a comprehensive annotations block, and an output schema, the description fully covers what an agent needs to invoke it correctly. The minimal description is complete for the tool's complexity.

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 100% and the schema defines the id simply as 'The memory entry id.' The description adds value by signaling that a valid id comes from memory_search results, constraining the parameter's valid domain beyond the schema. This is a small but meaningful enhancement.

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 uses a specific verb ('Fetch'), a precise resource ('specific memory entry'), and identifies the lookup key ('by id'). The parenthetical '(from memory_search)' further clarifies both the identity domain and the natural workflow, effectively distinguishing this from siblings like memory_search and memory_save.

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 parenthetical '(from memory_search)' implies the expected workflow—search results yield the id to fetch—but stops short of explicitly stating when to choose this tool over alternatives like memory_search or when not to use it. Usage is indicated 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.

memory_saveA
Idempotent
Inspect

Save a durable fact/preference/decision/commitment to long-term memory. Deduplicates against existing memories. Pass person to attach the memory to a specific contact's record in addition to the global store. For content about ONE person, prefer add_note (the user asked you to remember it) or add_memory (you worked it out yourself).

NameRequiredDescriptionDefault
personNoName or identifier of a specific person in your network this memory is about. When set, the memory is attached to that person's PRM record in addition to the global memory store.
contentYesThe memory to save.
categoryNoDefaults to 'fact'.
confidenceNo0-1 confidence (default 0.9).

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds value beyond that by disclosing deduplication against existing memories and the fact that `person` writes to a contact record in addition to the global store. It stops short of saying what dedup does on a hit (merge vs. skip) or what the response contains, though an output schema exists.

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 sentences, each earning its place: purpose, dedup behavior, parameter effect, then the sibling routing rule. The differentiator (global store vs. person-scoped alternatives) is front-loaded with zero 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?

Rich annotations, 100% schema coverage, and an output schema mean the description needn't explain return values or parameter formats. What remains — purpose, dedup, dual-write, and sibling routing — is fully addressed for a low-complexity, 4-parameter write 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 description coverage is 100% and each parameter already carries its own description, including the person-attachment semantics. The description restates the `person` dual-write behavior but adds nothing about `category` enumeration or `confidence` scaling beyond the schema. Baseline 3 is appropriate 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.

Purpose5/5

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

States a specific verb and resource ('Save a durable fact/preference/decision/commitment to long-term memory') and immediately narrows scope with 'Deduplicates against existing memories' and the dual-write behavior of `person`. An agent can tell it apart from add_note/add_memory without opening either schema.

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?

Explicitly routes the agent away from this tool when the content concerns ONE person, naming both alternatives and the condition that selects each ('the user asked you to remember it' → add_note; 'you worked it out yourself' → add_memory). This is a genuine when/when-not rule, not implied usage.

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

move_profile_to_personA
Destructive
Inspect

Move one identifier (an email, LinkedIn, GitHub, X, or phone) off the record it's wrongly attached to and onto the person it really belongs to. Both records stay; the identifier and all its Gmail/Calendar/activity move with it, and noticed won't re-attach it to the old record. Pass from_person_id + identifier (as you see it — get_person shows a record's identifiers) + a to_person_id OR to_new_contact. Reversible from /logs. Fixes a mis-attached email/profile — to MERGE two records that are the same person, use accept_identity_match instead.

NameRequiredDescriptionDefault
identifierYesThe identifier to move: an email, a LinkedIn URL/vanity, a phone number, or a source-prefixed profile id (email:a@b.com, linkedin:vanity, github:<numeric id>, x:<numeric id>, phone:<number>). For GitHub or X pass the NUMERIC id (get_person's github_user_id) or the source-prefixed id — a login/URL can't resolve. Must be one the from_person currently has.
to_person_idNopersons.id to move it ONTO (an existing record). Pass this OR to_new_contact.
from_person_idYespersons.id the identifier is CURRENTLY (wrongly) attached to.
to_new_contactNoCreate a brand-new contact to move the identifier onto — use when it belongs to someone not in your network. Pass this OR to_person_id.

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations declare destructiveHint=true and readOnlyHint=false, but the description adds meaningful behavioral detail: the identifier and its Gmail/Calendar/activity move, both records persist ('the identifier ... off the record ... onto the person'), and it 'won't re-attach' to the old record. It also states reversibility via /logs. This is valuable disclosure beyond the annotations, though it stops short of detailing error conditions or 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?

The description is a single dense paragraph but every clause earns its place: the action, the side effects, the target options, and the alternative tool. It is front-loaded with the verb ('Move...') and purpose. It could be trimmed slightly, but it avoids redundancy and remains readable for an agent.

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?

Given the tool's complexity (union-type parameter, nested object, destructive operation, no output schema), the description covers the essential decision points: when to use, what moves, that it's reversible, and what NOT to use it for. It doesn't explicitly cover error cases or the exact behavior if both targets are passed, but those are schema-enforceable. Overall, sufficient for correct invocation.

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?

All four parameters are well documented in the schema (100% coverage). The description adds practical guidance: refers to get_person for the identifier, marks from_person_id as the 'wrongly attached' record, and explains the to_person_id vs to_new_contact choice. The schema already covers formats, but the description's clarification of the union (either-or) and the get_person hint adds value. Slight overlap with schema prevents a 5.

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 gives a precise verb+resource+outcome: 'Move one identifier ... off the record it's wrongly attached to and onto the person it really belongs to.' It states both the action and the intent (fixing a mis-attachment), distinguishing it from a merge tool. This is unambiguous and actionable.

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?

Explicitly explains when to use (identifier wrongly attached) and when not to (merging two records → use accept_identity_match). It also provides a prerequisite hint (see identifiers via get_person) and the OR-choice between to_person_id and to_new_contact. Clear guidance with a named alternative.

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

my_profileA
Read-onlyIdempotent
Inspect

Your complete permission-aware self knowledge, including onboarding research before external accounts are connected. Shares canonical claims, citations and versions with get_person('me'). Legacy fields are compact previews; request sections and use cursors for full histories and explicit completeness/indexing state.

NameRequiredDescriptionDefault
limitNoMaximum items per requested section, default 10. Follow nextCursor to retrieve the rest.
cursorsNoPer-section nextCursor values from the previous read; restart a section when its source version changes.
sectionsNoKnowledge sections to read. Each returns a bounded page, completeness state and continuation cursor.

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A3.8/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, not open-world), so the bar is lower. The description adds real behavioral context beyond them: permission-aware scoping, inclusion of onboarding research gathered before external accounts were connected, legacy fields being compact previews, and explicit completeness/indexing state with cursors.

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 tight sentences, front-loaded with the primary purpose and the get_person relationship. The section/cursor mechanics come second. Minor jargon ('completeness/indexing state') costs a little clarity but no sentence is filler.

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 here. Given the nested object params (per-section cursors keyed by section name) and the 100% schema coverage, the description supplies the missing conceptual layer — why sections and cursors matter for completeness — making it adequate for invocation.

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 100%, so the baseline is 3, but the description adds meaning the schema lacks: legacy fields are previews only, sections must be requested to get full histories, and cursors surface explicit completeness/indexing state. This clarifies why the parameters exist rather than restating their types.

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 identifies the resource precisely as the caller's own profile ('Your complete permission-aware self knowledge') and names the related sibling get_person('me'), noting they share canonical claims. The verb is implicit (read) rather than stated, but an agent can tell what it retrieves and how it relates to get_person.

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?

It gives procedural guidance ('request sections and use cursors for full histories') but never states when to choose my_profile over get_person('me') or any other sibling, nor any exclusions. Usage is implied by the data-relationship note rather than spelled out as a routing rule.

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

network_summaryA
Read-onlyIdempotent
Inspect

Lightweight overview of your network — total people, breakdowns by source/company, recent vs stale — without paging through search. scope:'team' returns your POOLED TEAM network instead: the distinct total known by ANY teammate plus each member's own network size + consent tier. For overall 'how many…' questions; for 'how many <role/type>' use search_people with the role filter and read total.

NameRequiredDescriptionDefault
scopeNo'own' (default) — your network. 'team' — the pooled team network (total + per-member sizes).
team_idNoFor scope:'team' — one team's team_id (from account_status.teams). Omit it to summarize every team you're in: `total` counts a person two teams share once and `teams` has one summary per team.

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare this a read-only, idempotent, non-destructive, closed-world read. Beyond that the description discloses behavior the annotations cannot: no paging required, and that team scope returns a pooled distinct total (deduped across teammates) plus each member's own size and consent tier.

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?

Front-loads the core capability, then the team-scope exception, then the routing rule — a sensible order with no filler sentences. It is dense with em-dash clauses and repeats a little of what the schema already states, but every sentence carries information.

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 two-parameter read tool with an output schema and full annotation coverage, nothing an agent needs is missing: purpose, scope semantics, aggregation caveats, and the alternative tool are all covered.

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 100%, so the schema already defines both params and the omit-team_id behavior; baseline would be 3. The description still adds meaning — 'distinct total known by ANY teammate' and the consent-tier notion — which clarifies what the pooled number actually represents, though some of this overlaps the schema text.

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 resource (network) and specific output content — total people, breakdowns by source/company, recent vs stale — plus a distinct team-scope mode. It also explicitly separates itself from search_people, so an agent can pick it 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 Guidelines5/5

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

Gives an explicit routing rule: use this for overall 'how many…' questions, and use search_people with a role filter for 'how many <role/type>'. It also names the condition that selects the team mode (scope:'team') and what that mode returns instead.

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

reject_list_suggestionA
Destructive
Inspect

Reject one pending add/remove suggestion for a list. The decision is retained so noticed does not propose it again.

NameRequiredDescriptionDefault
list_idNoThe list id. Pass this OR list_name.
list_nameNoThe list name, matched case-insensitively. Pass this OR list_id.
person_idYesThe person id on the pending suggestion.

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A4.3/5.0
Behavior4/5

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

The description goes beyond the destructiveHint annotation by explaining that the rejection decision is retained and prevents the suggestion from being proposed again. This adds useful behavioral context about persistence and future behavior.

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 concise sentences with no filler. The core action is front-loaded and the retention behavior is stated in the second sentence without unnecessary detail.

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 full schema coverage, an output schema, and annotations already present, the description is complete for an agent to understand the tool's purpose and side effects. Nothing essential is missing.

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 parameters are already well documented. The description adds the 'pending' qualifier but does not need to explain individual parameters further.

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 clearly states a specific action ('Reject') on a specific resource ('one pending add/remove suggestion for a list'). It distinguishes this from the sibling accept_list_suggestion by focusing on rejection and the retained decision.

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?

The description makes the usage context clear: use it when rejecting a pending add/remove list suggestion. It does not explicitly name alternatives or exclusions, but the context is strong enough that an agent can infer when this tool applies.

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

remove_from_listA
DestructiveIdempotent
Inspect

Take a person off a list. Removes the membership only — the person stays in your network, and noticed may suggest them for this list again later. Identify the list by list_id or list_name.

NameRequiredDescriptionDefault
list_idNoThe list's id (from list_lists / create_list). Pass this OR list_name.
list_nameNoThe list's name, matched case-insensitively. Pass this OR list_id.
person_idYesThe person's id to take off the list.

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false. Beyond that, the description meaningfully adds that the person remains in the network and that suggestions may recur — which are non-obvious behavioral consequences for a destructive operation. It does not fully detail what happens to other list memberships or whether removal cascades, but the key semantic boundary is disclosed.

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 precise sentences with zero filler. The core action and its non-destructive consequence for the network are front-loaded, followed by identifier guidance. Every sentence contributes distinct 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?

For a 3-parameter tool with 100% schema coverage, an output schema present, and annotations covering safety and idempotence, the description is nearly complete. It covers the one ambiguous area (membership vs. network removal) and identifier method. Minor absence: it doesn't state that the operation is idempotent in plain language, but the annotation already supplies that, so the description need not repeat it.

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?

Input schema coverage is 100% with each parameter already documented, so the schema carries the primary burden. The description adds a small interpretive note: list_id OR list_name are alternatives, matching the schema's 'Pass this OR' phrasing and the case-insensitivity detail. No new meaning 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 clearly states a specific verb ('take off') and resource ('list'), and unambiguously differentiates membership removal from removing the person from the network. However, it does not explicitly contrast with sibling tools like add_to_list or remove_from_network beyond the 'stays in your network' phrase, so sibling differentiation is partial rather than explicit.

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

Usage Guidelines4/5

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

The description conveys a clear context: use this when removing membership only, not the person from the network. It implies the alternative (remove_from_network) by clarifying what it does not do, and it explicitly tells how to identify the list (by list_id or list_name). It stops short of naming the sibling alternative explicitly, so not a full 5.

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

remove_from_networkA
Idempotent
Inspect

Remove a person from your active network. Soft archive — history is kept and they can be re-added.

NameRequiredDescriptionDefault
person_idYesThe person's id to remove from your network.

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A4.3/5.0
Behavior4/5

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

The description adds meaningful behavioral context beyond the annotations: 'Soft archive — history is kept and they can be re-added.' This tells the agent the operation is non-destructive and reversible, consistent with destructiveHint=false and idempotentHint=true. It does not mention auth or side effects, but the annotations already establish the safety profile.

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 with zero filler. The first sentence states the purpose; the second sentence adds the critical behavioral nuance. Everything 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 single-parameter, soft-archive removal operation, the description is complete. Combined with the annotations and an output schema, the agent has enough information to select and invoke the tool 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?

The schema already provides 100% coverage for the single parameter, person_id, with a clear description. The tool description merely reiterates the resource being affected. There is no additional semantic value needed here.

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 clearly states a specific action ('Remove'), a specific resource ('a person'), and the scope ('your active network'). The 'soft archive' phrase distinguishes it from a hard delete, which helps the agent differentiate it from sibling tools like remove_from_list or permanent deletion operations.

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?

The description makes clear when to use this tool: removing a person from your active network. It does not explicitly name alternatives or exclusion criteria, but the scope is unambiguous. For a simple one-parameter tool, this is sufficient context.

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

research_personA
Idempotent
Inspect

Research and save cited person knowledge with noticed's bounded research swarm. Self works before connecting external profiles; other people require a selected Team. Returns a durable run ID immediately. If dispatch is retry_required, repeat the same request with the same client_request_id; do not create a new run.

NameRequiredDescriptionDefault
limitsNo
team_idNoRequired for another person. Research belongs only to this selected Team; omit for self.
questionYes
person_idNoAuthenticated self account, including before connecting profiles, or an admitted person UUID.me
categoriesNoOptional research category keys; omitted means all 32.
client_request_idYesStable retry ID for this research request.

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

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=false, so the safety profile is covered. The description adds genuine behavioral detail beyond that: the call returns a run ID immediately (async execution) and defines the retry protocol ('if dispatch is retry_required, repeat the same request with the same client_request_id; do not create a new run'). It does not mention polling via research_status or how to cancel via cancel_research.

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 short sentences, front-loaded with what the tool does and followed by prerequisites and retry rules; each sentence carries actionable content. Slightly dense but free of filler.

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 six-parameter async tool with a nested limits object and an output schema (the run ID), the description covers invocation prerequisites, the immediate return, and retry semantics. It omits any pointer to the companion research_status/cancel_research tools for following up on the returned run, which is the one notable 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 coverage is 67%, with descriptions already present for team_id, person_id, categories, and client_request_id. The description reinforces the retry meaning of client_request_id and the self-vs-Team split, which the schema only gestures at. However, the nested 'limits' object and 'categories' are left entirely to the schema, so it adds only partial value over 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 concrete verb and resource: 'Research and save cited person knowledge with noticed's bounded research swarm.' It also signals the async dispatch model ('returns a durable run ID immediately'), which distinguishes it from the synchronous-looking siblings. It does not name adjacent tools like enrich_person or submit_enrichment_research, so the boundary with those is left to inference.

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 explicit preconditions: self research works before connecting external profiles, while research on another person requires a selected Team. That is clear context an agent can act on. It stops short of naming alternatives or exclusions (e.g., when to prefer enrich_person or submit_enrichment_research), so it is not a full routing statement.

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

research_statusA
Idempotent
Inspect

Read research progress, category coverage, committed publication and indexing status. Retry indexing separately without repeating research.

NameRequiredDescriptionDefault
run_idYes
retry_indexNoRetry the rebuildable search projection; committed profile findings are already readable.

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false, idempotentHint=true and destructiveHint=false; the description earns credit by explaining the source of the non-read-only behavior — the optional indexing retry — and clarifying that the retry does not re-run research. It stops short of describing rate limits, error behavior, or exactly what gets rebuilt.

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 compact sentences, front-loading the read purpose before the retry caveat, with no filler. Every clause carries information.

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 only two parameters and the mutation path explained, the description supplies everything an agent needs to invoke it 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 coverage is 50%: retry_index is documented in the schema while run_id is not, and the description adds only that retry is a separate indexing action rather than new research. That partially compensates for the undocumented run_id but adds no format or constraint detail beyond the schema.

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 verb (Read) and enumerates the specific resources returned: research progress, category coverage, publication and indexing status. An agent can distinguish it from research_person or cancel_research, though no sibling is named explicitly.

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

Usage Guidelines3/5

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

The second sentence gives guidance for the retry case ('Retry indexing separately without repeating research'), which implies retry_index should only be set when indexing is the problem. However, there is no guidance on when to call research_status versus enrichment_batch_status, submit_enrichment_research, or cancel_research.

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

resolve_personA
Read-onlyIdempotent
Inspect

Deterministically resolve a (possibly misheard) name — optionally with a company hint — to ONE person in your network (scope:'own', default) or your team's pooled network (scope:'team', the same scopes as search_people). A near-exact match to your own name resolves to you, flagged is_self. Returns 'matched' (with confidence), 'ambiguous' (ranked alternatives to ask the user about), or 'none'. Team results list the teams and teammates (known_by) who know each person. PREFER THIS over hand-rolled search_people ladders whenever the task is "who is X?" from a voice note, capture, or mention — same input always gives the same answer.

NameRequiredDescriptionDefault
nameYesThe person's name as heard/known — misspellings are expected and handled.
scopeNo'own' (default) — your network. 'team' — your POOLED TEAM network, as in search_people.
companyNoCompany hint if known (also fuzzy) — sharply improves disambiguation.
team_idNoFor scope:'team' — one team to search (from account_status.teams). Omit it to resolve across every team you're in. A team you don't belong to is rejected.

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/openWorld=false, so the bar is lower; the description still adds a determinism contract ("same input always gives the same answer"), the self-resolution rule with is_self, and the three outcome states. It does not mention latency or cost of team-wide resolution, which keeps it off 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?

Front-loaded with purpose and the decisive preference guidance, and every sentence carries information. It is a dense block of prose with parenthetical asides (scope labels, flag names) that could be split for readability.

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?

Covers scope semantics, fuzzy input handling, disambiguation hints, and the matched/ambiguous/none outcome model, which is enough to call it correctly. An output schema exists so return-value detail is not required, though how confidence should be interpreted is left unstated.

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 100%, so the baseline is 3; the description goes further by framing company as a disambiguation lever and tying scope:'team' semantics to search_people, and by noting the implicit "all teams" behavior when team_id is omitted. It mostly echoes rather than extends the schema's own wording.

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 ("deterministically resolve a name ... to ONE person") plus the two scopes, and explicitly contrasts with search_people. An agent can tell this apart from search_people, get_person, or research_person without opening any schema.

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?

Gives an explicit use case ("who is X?" from a voice note, capture, or mention) and names the alternative to avoid ("hand-rolled search_people ladders"). Scope selection guidance is also given ('own' default vs 'team').

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

save_onboardingAInspect

Save the user's onboarding interview answers into noticed in ONE call (use after the onboard skill's questionnaire, or whenever the user shares who they are and what they want). Appends a dated identity note (name, roles, location, what they're building) to the user's own person when available, stores research answers (focus areas, value ranking, current tools, extra notes) in deduplicated long-term memory, and records onboarding completion. Calling it again appends another dated identity note while deduplicating matching memories.

NameRequiredDescriptionDefault
rolesNoThe user's role chips, stored as given — e.g. ['Founder', 'Product & Engineering'].
buildingNoOne line on what the user is building / working on right now.
locationNoWhere the user is based — e.g. NYC, Lisbon, Remote.
user_nameNoThe user's name, as they want to be addressed.
extra_notesNoAnything else worth knowing — goals, who they want to meet, open context.
focus_areasNoWhat's on the user's plate right now — e.g. ['Sales', 'Hiring', 'Fundraising'].
current_toolsNoHow the user manages relationships today — e.g. ['Notes app', 'LinkedIn', 'Nothing'].
value_rankingNoWhat the user wants most from noticed, ranked most → least important.
communication_preferencesNoHow the user wants the agent to communicate — e.g. ['brief responses', 'no emojis'].

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A4.7/5.0
Behavior5/5

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

The description goes well beyond the annotations by detailing side effects: appending a dated identity note, storing deduplicated memories, recording completion, and the behavior on repeated calls (appends another note while deduplicating). It also notes the conditional 'when available' for the person. No contradiction with annotations; in fact, it enriches the idempotentHint=false annotation by explaining why it's not fully idempotent (deduplication still appends identity notes).

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

Conciseness5/5

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

The description is concise yet informative. It opens with the core purpose in a single sentence, then elaborates on behavior in two more sentences. There is no redundancy or fluff; every sentence contributes to understanding the tool's function and side effects. The structure is effective and front-loaded.

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 tool with 9 parameters and multiple side effects, the description covers the essential behavioral aspects: what gets stored, where, and what happens on repeat calls. It also notes the conditional person availability. The output schema exists, so return format is implicitly covered. No critical information seems missing for an agent to execute this tool correctly.

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

Parameters4/5

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

The schema provides 100% coverage with descriptions for all 9 parameters, so the baseline is 3. The description adds meaningful grouping: it maps identity-note fields (name, roles, location, building) and research-answer fields (focus areas, value ranking, current tools, extra notes), which helps an agent understand how parameters are used together. It doesn't repeat schema descriptions but adds contextual organization, justifying a 4.

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 clearly states the tool's purpose: saving onboarding interview answers in one call. It specifies the trigger (after the onboard skill's questionnaire or when the user shares who they are) and outlines the concrete actions: appending a dated identity note, storing research answers in deduplicated memory, and recording completion. This distinguishes it from generic memory tools like add_memory and add_note.

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?

The description provides explicit usage context: 'use after the onboard skill's questionnaire, or whenever the user shares who they are and what they want.' It does not explicitly mention alternatives or when not to use it, but the phrase 'in ONE call' and the dedicated nature of the tool imply it is the specialized onboarding entry point, not for ad-hoc memory saves. This is clear enough for an agent to select it appropriately.

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

search_peopleA
Read-onlyIdempotent
Inspect

Search people by free text — names, companies, titles, skills, past roles, bios, and your own notes and tags all match. Known GitHub identities include github_login and github_url; github_user_id is a stable account ID, not a handle. Terms are OR-matched and ranked by how many match (more terms broadens, not narrows). To narrow: put AND between terms to require all (e.g. 'health AND medtech'), or prefix a term with + to require just it (e.g. '+rust berlin'). For roles/functions (founder, engineer, investor, …) use the role filter instead of free text — it catches title variants ('Founding Partner') that keywords miss, and free text also matches bios, past roles, and notes. To count people of a type, use structured filters and read total from the response — a free-text total counts keyword matches, not people of that type. scope:'own' (default) / scope:'public' (beyond your network + warm-intro paths) / scope:'team' (your pooled team network). Optional company, location, skills, tags, sources, and date filters apply in scope:'own' and scope:'team' (q is optional there — omit it to browse). A structured-filter zero = thin data, not absence — fall back to free text. Misspelled names/companies fall back to fuzzy matching (fuzzy: true = closest matches — confirm before trusting); in scope:'own', concept queries with zero literal hits then fall back to embedding similarity (semantic: true = related people, not literal matches). Free-text responses also return strong_total (rows matching ALL terms — the honest count) and per-row matched_on (which fields matched). In scope:'public', role/location/company/skills are applied to the global hits (filtered: true); filters that cannot apply there are listed in unsupported_filters.

NameRequiredDescriptionDefault
qNoFree-text query. Each term is matched (substring, accent-insensitive) against name, headline, current company, location, skills, GitHub repo languages/topics, bio, every linked account's names/usernames/headlines/bios and past roles (company + title). Your own people also match your recorded interactions, memories, notes and tags; a teammate's people (scope:'team') match only their public profile text, never the teammate's private history, notes or tags. Name hits rank highest; bio, past-role, note and tag hits rank lowest. Terms are OR-matched; operators narrow: uppercase AND between terms requires all of them; a +term prefix requires just that term (e.g. '+health medtech'). Optional in scope:'own'/'team' (omit to browse with filters). In scope:'public', operators only affect the your-network half of results; global hits are matched by semantic similarity.
roleNoFilter by function (matched against the headline and, in your own network, past titles): engineer, designer, product, gtm, founder, recruiter, investor, other. `gtm` covers sales/growth/marketing/partnerships/biz-dev; `other` is the catch-all for customer success, operations, legal, academia, etc. Matches any of the listed roles. Seniority (CEO, CTO, VP, etc.) is not a function — pass it in `q` instead.
tagsNoRequire all of these tags you've applied.
limitNoPage size (own/team: default 25, max 200; public: default 40, max 50).
scopeNo'own' (default) — your network only. 'public' — global match + warm-intro paths to people you don't know yet. 'team' — your POOLED TEAM network (people known by ANY teammate), with the same filters and exact `total` as 'own' (no cap; page with offset/limit). Each team hit carries `team_members` (who on the team knows them, their consent-gated strength and teams), `team_ids`, and `primary_team_id` — pass that as get_person's team_id.
staleNoOnly people you've never interacted with, or not in 90+ days.
offsetNoPagination offset.
recentNoOnly people you've interacted with in the last 14 days.
skillsNoRequire all of these skills.
companyNoFilter by company — substring match on current OR former employers (each hit's `company_match` says which). In scope:'public' only the current company is checked.
sourcesNoRestrict to people who came from any of these sources.
team_idNoFor scope:'team' — the team_id of one team to search (from account_status.teams). Omit it to search every team you're in (a person several teams share is one hit, with all their `team_ids`). A team you don't belong to is rejected.
locationNoFilter by location (substring match; common aliases such as NYC/New York, SF/Bay Area, Lisbon/Lisboa expand).
added_afterNoOnly people added to your network ON/AFTER this date (ISO, e.g. 2026-06-01). For "who did I add this week / since X?". Adding ≠ interacting — for interaction recency use recent/stale.
added_beforeNoOnly people added STRICTLY BEFORE this date (ISO).
last_interaction_afterNoOnly people whose last recorded touchpoint was ON/AFTER this date (ISO, e.g. 2026-06-22 or 2026-06-22T00:00:00Z). Use for 'who did I interact with on/since <date>' or 'everyone with a touchpoint this week'. People with no interaction are excluded. Combine with last_interaction_before for a date range.
last_interaction_beforeNoOnly people whose last recorded touchpoint was STRICTLY BEFORE this date (ISO, exclusive upper bound). People with no interaction are excluded. Combine with last_interaction_after for a date range.

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower, yet the description still discloses OR-matching and ranking order, AND/+ narrowing operators, fuzzy fallback on misspellings, embedding fallback for concept queries in scope:'own', and how scope:'public' applies filters with `filtered`/`unsupported_filters` reporting. These are behaviors an agent could not infer from annotations alone.

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?

All content is substantive, but it is delivered as one long unbroken paragraph mixing matching semantics, filtering advice, scope behavior, and fallback rules — much of which duplicates the very detailed schema descriptions. Front-loading the matching model is good; the density makes it harder to scan than it needs to be.

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 17-parameter tool with zero required params, an output schema, and full annotation coverage, the description covers the behaviors that matter: matching model, scope semantics, fallback paths, and how to read `total`/`strong_total`/`matched_on`. Nothing an agent needs to call it 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?

Schema coverage is 100% and the schema descriptions are already detailed, so baseline is 3; the description still adds decision-relevant meaning — the distinction between free-text `total` (keyword matches) and people of a type, and why `role` beats keywords for functions. It stops short of restating per-parameter syntax, which is correct given 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?

Opens with a specific verb and resource ('Search people by free text') and immediately enumerates the matched fields — names, companies, titles, skills, past roles, bios, notes, tags. It is clearly differentiable from siblings such as get_person (single fetch), network_summary (aggregates) and resolve_person (identity work).

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?

Explicit routing guidance: use the `role` filter instead of free text for functions because keywords miss title variants; use structured filters plus `total` to count people of a type; use recent/stale for interaction recency, added_after for network-adding; and fall back to free text when a structured filter returns zero. Names the alternatives and the conditions that select them.

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

set_general_accessA
DestructiveIdempotent
Inspect

After user confirmation, set a List or View to restricted, Team-visible, or anyone-with-link access. Requires full access; Team access only works on a Team-owned List or View. Link access is view-only. Does not create invitations or collaborator grants. Pass exactly one of list_id, list_name, view_id, or view_name.

NameRequiredDescriptionDefault
roleYes
accessYes
list_idNoThe list id. Pass this OR list_name.
view_idNoThe View id. Pass this OR view_name.
list_nameNoThe list name, matched case-insensitively. Pass this OR list_id.
view_nameNoThe View name, matched case-insensitively. Pass this OR view_id.

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already flag it as destructive, idempotent, and open-world; the description adds real context beyond that: the confirmation requirement, the full-access precondition, and the fact that link access is view-only. It leaves one meaningful gap for a destructive permission change — what happens to existing collaborators when switching to restricted or team.

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?

Five tight sentences, front-loaded with the action and its confirmation gate, followed by preconditions, caveats, and the identifier rule. No filler and no repetition of obvious 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?

For a destructive permission-mutation tool the description covers preconditions, valid states, and identifier selection, and the output schema handles return values. The remaining gap is the effect on pre-existing collaborators/permissions when the access level changes.

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?

At 67% schema coverage the schema's pairwise 'OR' notes don't establish the cross-group rule, so the description's 'Pass exactly one of list_id, list_name, view_id, or view_name' is genuinely additive. The access enum values are also explained in prose, though the 'role' enum (full_access/edit/comment/view) gets no treatment anywhere.

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 opens with a specific verb and resource ('set a List or View') plus the exact enumeration of target states (restricted, Team-visible, anyone-with-link). It distinguishes this tool from content-editing siblings like update_list/update_view by framing it as access configuration, and explicitly disclaims invitation/collaborator-grant behavior.

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 precondition ('After user confirmation', 'Requires full access') and states a valid-usage constraint ('Team access only works on a Team-owned List or View'). What's missing is an explicit pointer to alternatives — e.g. that collaborator grants are handled elsewhere rather than merely saying it doesn't do them.

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

set_publishedA
DestructiveIdempotent
Inspect

Publish or unpublish a List or View at its stable public link. Requires full access. Unpublishing removes public access, so confirm that intent; repeating the same value is idempotent. Pass exactly one of list_id, list_name, view_id, or view_name.

NameRequiredDescriptionDefault
list_idNoThe list id. Pass this OR list_name.
view_idNoThe View id. Pass this OR view_name.
list_nameNoThe list name, matched case-insensitively. Pass this OR list_id.
publishedYesTrue to publish; false to unpublish.
view_nameNoThe View name, matched case-insensitively. Pass this OR view_id.

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A3.6/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 description's 'repeating the same value is idempotent' largely restates structured data. It does add genuinely new context, though: the authorization requirement ('Requires full access') and the concrete consequence ('Unpublishing removes public access'), which annotations cannot convey. With no output schema referenced for return shape, this is a solid but not exceptional supplement to the annotation profile.

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 tight sentences with the operation and target front-loaded, followed by auth, side effect, and the parameter constraint. Nothing is padded, though the idempotency clause is close to redundant with the annotation.

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 destructive toggle tool it covers the essentials an agent needs: what is mutated, the permission bar, the irreversible-looking side effect, idempotent retry safety, and the parameter exclusivity rule. Return values are covered by the existing output schema, so no gap there; only explicit alternative routing is missing.

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 each property already documents its own either/or pairing, so the baseline is 3. The description does add one thing the schema does not: the cross-parameter exclusivity rule ('Pass exactly one of list_id, list_name, view_id, or view_name'), which resolves ambiguity about whether a list and a view could be supplied together.

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 opens with a precise verb pair ('Publish or unpublish') and a specific resource ('a List or View at its stable public link'), which is enough to separate it from update_list/update_view. It never names a sibling explicitly, so the differentiation is inferential 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 Guidelines4/5

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

It supplies clear preconditions ('Requires full access') and a caution ('confirm that intent' before unpublishing), which tells the agent when this call is safe to make. It stops short of naming alternatives such as update_list for non-public changes, so the routing 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.

suggest_identity_matchA
Destructive
Inspect

Merge two records in your network that are the SAME person — e.g. an email-only contact and their LinkedIn profile. Pass person_a and person_b as ids from search_people / get_person / resolve_person; this tool does NOT resolve names, so use resolve_person FIRST to clear up any ambiguity about who you mean. The person you name first (person_a) is kept as the surviving record and person_b is folded into it; your own person always survives. The merge is REVERSIBLE — an admin can undo it. If noticed has evidence the two may be DIFFERENT people, it does NOT merge — it returns a needs-confirmation response laying out the conflicting evidence plus a confirmation_token; share the evidence with the user, and ONLY if they review it and still want to merge, call again passing that confirmation_token back to override. The token only comes from that response — never pre-set it based on what the user said before seeing the evidence. When a VERIFIED SIGN-IN shows an identity belongs to someone else, the merge isn't available from chat at all — simply tell the user an admin needs to review that pair on the dashboard (don't explain the internal mechanics). Use once you're confident two entries are one human.

NameRequiredDescriptionDefault
reasonNoOptional short note on why they're the same person.
person_aYesperson_id of the FIRST person — kept as the surviving record after the merge (your own person always survives).
person_bYesperson_id of the SECOND person — merged into person_a.
confirmation_tokenNoReturned BY a needs-confirmation response alongside the evidence. Pass it back to merge anyway — only after the user has reviewed the conflicting evidence and still says they're the same person. Cannot be guessed or pre-set.

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the destructiveHint annotation, the description thoroughly discloses behavioral traits: person_a is the surviving record, the merge is reversible by an admin, conflicting evidence triggers a needs-confirmation response rather than a merge, the confirmation_token cannot be guessed, and verified sign-in conflicts are barred from chat. This goes far beyond what annotations convey.

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 long, but almost every sentence carries necessary safety-critical information for a destructive merge operation. It front-loads the core purpose and then lays out the confirmation flow and edge cases. A bit of restructuring into clearer paragraphs would improve scanability.

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?

Given the tool's destructive nature and complex confirmation flow, the description is remarkably complete: prerequisite tools, ordering constraints, failure behavior, override mechanics, and a restricted-access edge case are all covered. An agent has enough context to invoke this tool correctly without external documentation.

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

Parameters5/5

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

Although schema coverage is 100%, the description substantially enriches the parameters: it explains that person_a becomes the surviving record, person_b is folded in, and confirmation_token must come from a prior needs-confirmation response and must never be pre-set. This adds critical operational meaning that raw schema definitions do not provide.

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

Purpose5/5

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

The description states a specific action ('Merge two records') on a specific resource (person records), and clarifies which record survives and which is folded. It clearly distinguishes this merge operation from query/creation tools and from related identity tools in the sibling list.

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

Usage Guidelines4/5

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

The description gives strong when-to-use guidance: use it only after confirming two entries are the same human, use resolve_person first to disambiguate names, and do not use it at all for verified sign-in conflicts. It does not explicitly name sibling tools like accept_identity_match or dismiss_identity_match as alternatives, so it falls just short of full routing guidance.

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

sync_connected_sourceAInspect

After explicit user confirmation, request a fresh import for one connected noticed source. This queues work and never means the import is already complete. It does not send anything through the provider.

NameRequiredDescriptionDefault
sourceYesConnected integration source to refresh.
confirmedYesSet to true only after the user explicitly confirms this sync.
account_idNoAccount id from source status; required for multi-account sources.

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A4.4/5.0
Behavior5/5

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

The description discloses important behavior beyond the annotations: it queues work asynchronously, does not imply completion, requires explicit user confirmation, and does not send anything through the provider. These are non-obvious traits that help an agent avoid incorrect assumptions about a sync operation.

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

Conciseness5/5

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

The description is three short sentences, each earning its place: action and requirement, async/completion semantics, and negative behavior. It is front-loaded with the most important condition and contains no redundant filler.

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 description covers the key operational facts: confirmation, queuing, non-completion, and no provider send. With a full input schema and an output schema present, this is nearly complete, though naming get_connected_source_status for checking sync completion would make it even stronger.

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 parameters are already well documented. The description adds confidence around the confirmed parameter and the meaning of 'source', but it does not need to add more since the schema carries the parameter-level detail.

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 action ('request a fresh import'), a clear resource ('one connected source'), and distinguishes itself by stating it queues work and never means the import is complete. This clearly separates it from related tools like get_connected_source_status.

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?

The description explicitly conditions use on explicit user confirmation, which matches the confirmed const true parameter. It does not explicitly name sibling alternatives for checking status or connection setup, but the usage context is otherwise clear.

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

track_introA
Destructive
Inspect

Track a promised introduction — someone offered to connect the user with a person they haven't met yet. Creates (no intro_id) or updates (intro_id) a pending intro tied to the connector, so the offer doesn't evaporate in notes. Partial info is fine ('still waiting on their name'). When the intro lands: add the person to the network, then pass resolved_person_id here to graduate it (marks done).

NameRequiredDescriptionDefault
notesNoContext — where the offer happened, why it matters.
statusNowaiting (default: still missing info) · ready (ready to ask) · requested (intro asked) · done (it happened) · dropped.
intro_idNoExisting intro id (from list_intros) to update. Omit to create.
offered_onNoDate the intro was offered (YYYY-MM-DD).
target_orgNoTheir company/org, if known.
target_nameNoThe person being offered, as known so far — partial is fine.
missing_fieldsNoWhat's still needed before asking (e.g. ['name','linkedin']).
resolved_person_idNoThe real contact's person id once the intro happened — implies status done unless you pass a status explicitly.
connector_person_idNoWho offered the intro (their person id from search_people).

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A4.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false and destructiveHint=true, and the description's 'create or update' language is consistent with that. It adds real behavioral detail about the done-state transition via resolved_person_id. However, with destructiveHint=true on a zero-required-param upsert, it never says whether a partial update overwrites existing notes/status, which is the risky behavior an agent would need warned about.

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 sentences, front-loaded with the purpose, then the create/update mechanic, then the completion path. The parenthetical example ('still waiting on their name') earns its place by showing tolerance for partial data; nothing is redundant.

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 an output schema, full annotation coverage and 100% schema coverage, the definition supplies what an agent needs to pick the right mode and finish the workflow. The one gap is upsert merge behavior — whether unspecified fields are preserved on update — which matters for a 9-param tool with no required fields.

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 100%, so the baseline is 3, but the description genuinely adds cross-parameter meaning: presence/absence of intro_id toggles create vs update, and resolved_person_id implies status=done unless status is passed explicitly. That mode-switching semantics is not obvious from the schema alone.

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 ('Track a promised introduction') and immediately names its scope: someone offered to connect the user with a person they haven't met. It also distinguishes the create vs update modes inline via 'no intro_id' / 'intro_id', so an agent can tell it apart from list_intros and add_to_network 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 Guidelines5/5

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

Gives explicit when-to-use conditions: capture an offer so it 'doesn't evaporate in notes', and update an existing record when an intro_id exists. It also sequences the follow-up workflow ('add the person to the network, then pass resolved_person_id here to graduate it'), naming the sibling call that must precede it.

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

update_actionA
DestructiveIdempotent
Inspect

Edit an existing action — change its text, its remind-me date, or mark it done/undone. Get the action_id from get_person → relationship.actions.

NameRequiredDescriptionDefault
doneNotrue → mark done; false → reopen. Omit to leave unchanged.
contentNoUpdated text for the action. Omit to leave unchanged.
action_idYesThe action to update (from get_person → relationship.actions).
remind_atNoUpdated remind-me date — can be a due date, a start date, or any follow-up date (ISO timestamp). Pass null to clear. Omit to leave unchanged.

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A4.5/5.0
Behavior5/5

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

Despite annotations indicating destructiveHint=true and idempotentHint=true, the description explicitly mentions 'edit' which implies modification, and importantly clarifies the semantics of the 'done' field (true marks done, false reopens). It adds behavioral clarity about how updates work (partial updates via omitted fields) which goes beyond annotations.

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

Conciseness5/5

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

The description is a single, efficient sentence that immediately states the purpose and lists the editable fields. It also front-loads the critical action_id source instruction. No wasted words.

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?

The tool has an output schema, so return values are covered by that. The key missing information would be permissions or side-effect details, but annotations already indicate destructive and idempotent behavior. The description covers the essential 'how to get the ID' and what can be updated, making it complete for its complexity.

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%, so each parameter is well-documented in the schema. The description adds a concise overview of what can be changed, reinforcing the existing schema descriptions. It does not introduce new meaning beyond what the schema already provides, so a baseline of 3 is 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?

The description clearly states the tool edits an existing action and specifies exactly what can be changed (text, remind-me date, done status). It distinguishes itself from sibling tools like create_action, complete_action, and delete_action by focusing on editing an existing action.

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 explicitly tells the agent how to obtain the action_id (via get_person → relationship.actions), which is crucial for correct invocation. It does not explicitly mention when not to use this tool or alternatives like complete_action, but the context is clear enough for typical editing scenarios.

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

update_listC
DestructiveIdempotent
Inspect

Rename a list, change the specific goal noticed matches suggestions against, or enable/disable AI suggestions. Identify it by list_id or an unambiguous list_name.

NameRequiredDescriptionDefault
nameNoNew list name.
list_idNoThe list id. Pass this OR list_name.
list_nameNoThe list name, matched case-insensitively. Pass this OR list_id.
ai_enabledNoWhether noticed should suggest additions and removals.
descriptionNoNew suggestion goal for the list.

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

C2.5/5.0
Behavior2/5

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

Annotations (readOnlyHint: false, idempotentHint: true, destructiveHint: true) already provide a safety profile, so the bar for added value is lower, but the description adds zero behavioral context about what is destructive (e.g., does disabling AI suggestions destroy existing goals?). The description does not contradict the annotations, but for a tool flagged as destructive, an agent is left uninformed about side effects.

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?

At 35 words across two sentences, the description is compact and non-redundant; the second sentence earns its place by clarifying the list-identification contract. However, the opening sentence crams in a garbled clause that forces re-reading, so the efficient structure is undercut by the confusing phrasing.

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?

With 5 optional parameters and three distinct sub-behaviors, an agent needs a clear semantic map, but the description covers only the mechanics of renaming and toggling suggestions, while leaving the 'goal' concept opaque and failing to clarify the destructive implications flagged by destructiveHint: true. The presence of an output schema excuses the absence of return-value docs, but the core semantic gaps remain.

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 baseline 3 applies. The description adds a loose mental model connecting 'goal', 'suggestions', and the list, but this is done awkwardly, and the schema's own parameter descriptions (e.g., 'New suggestion goal for the list') are actually clearer than the top-level description's attempt at paraphrase. The description adds little beyond what the 5 well-documented parameters already convey.

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

Purpose3/5

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

The description names specific operations ('Rename a list', 'enable/disable AI suggestions') and clarifies identification semantics, which distinguishes it from sibling list tools like create_list, delete_list, and get_list. However, the middle clause 'change the specific goal noticed matches suggestions against' is garbled and obscures what the 'description' parameter actually does. This materially hurts an agent's ability to understand one of the three core operations.

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 versus sibling tools like create_list, delete_list, add_to_list, or remove_from_list. The only routing nuance offered is that list identification can be by list_id or an unambiguous list_name, which is a genuine but thin hint, and there is no exclusion explaining when NOT to use list_name beyond unambiguity, nor any mention of preconditions.

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

update_personA
DestructiveIdempotent
Inspect

Update your notes, tags, custom_name, relationship_type, or the person's companies / role / emails / phones. What you set here are your own overrides — they win over whatever was imported/derived, wherever the person is shown (they're the same values the web relationship panel shows as chips) — so this is how you correct or fill in a relationship's contact details. A person can have SEVERAL emails, phones, and companies: pass the emails / phones / companies ARRAYS to record them all in one call — the first entry is the primary. Never stash a second email in notes. Each array REPLACES that field's current list (it does not merge, unlike tags), so include the values you want to keep; [] clears the override. The singular email / company are aliases for the primary. If they're not in your network yet, they're added first (upsert) — so it works on any search_people hit.

NameRequiredDescriptionDefault
roleNoTheir role/title — your override, wins over the role derived from their headline. Pass null to clear.
tagsNoMerged with existing tags. Prefer an existing tag from your network over coining a near-duplicate (reuse `sf`, don't add `san-francisco`); lowercase, and use the event:/place:/topic: namespaces where they fit.
emailNoTheir PRIMARY email — alias for emails[0]; keeps any other addresses already recorded. Pass null to clear. Use `emails` to set several.
emailsNoALL of their email addresses, primary FIRST (e.g. work + personal). REPLACES the current list — pass every address you want to keep; [] clears the override back to the imported/derived emails. Wins over any imported email.
phonesNoALL of their phone numbers, primary FIRST. REPLACES the current list; [] clears the override.
companyNoTheir PRIMARY company — alias for companies[0]; keeps any other companies already recorded. Pass null to clear. Use `companies` to set several.
companiesNoALL companies they're at, primary FIRST. REPLACES the current list; [] clears the override.
person_idYesThe person's id (from search_people / get_person).
custom_nameNoYour display name for them.
default_notesNoFreeform notes.
relationship_typesNoHow you know this person, from the closed set: family, close_friend, friend, acquaintance, coworker, alumni, customer, vendor, advisor, investor. Full editable selection; omitted automatic types are rejected on future refresh. Use add/remove for partial corrections. All roles except Coworker and Alumni require an explicit user statement.
relationship_types_addNoAdd types without replacing unrelated selections. A personal choice replaces the previous personal choice. Explicit add clears an automatic-tag rejection. Coworker and Alumni may be automatic; all other roles require an explicit user statement.
relationship_types_removeNoRemove types without replacing unrelated selections. Removing Coworker or Alumni persists a rejection across automatic refreshes. If a type is both added and removed, removal wins.

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations (readOnlyHint=false, destructiveHint=true, idempotentHint=true) by disclosing the crucial replace-vs-merge asymmetry: arrays REPLACE their list while tags merge, [] clears an override back to imported data, and the first entry is primary. It also flags the upsert side effect for non-network people, which is exactly the destructive-adjacent behavior an agent must know.

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?

Dense but front-loaded: the very first sentence says what can be updated, then it layers override semantics, aliasing, and replace/clear rules. Long single-paragraph form is justified by the 13-parameter, high-risk surface, though it could be broken up for scannability.

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 13-parameter destructive mutation with 100% schema coverage and an output schema present, the description covers everything an agent needs: precedence, replace/clear semantics, aliases, primary ordering, and the upsert behavior. Return values are correctly left to the output schema.

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 100%, so the baseline is 3, but the description adds cross-parameter meaning the per-property schema entries do not: that email/company are aliases for the primary array element, the replace vs merge contrast between arrays and tags, and the warning not to stash a second email in notes.

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 concrete verb (update) plus the exact resource fields (notes, tags, custom_name, relationship_type, companies/role/emails/phones) and frames them as user overrides that win over imported/derived data. This clearly separates it from read-side siblings like get_person and search_people.

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 strong situational guidance: use it to correct or fill in a relationship's contact details, and it also works on any search_people hit via upsert for non-network people. It does not explicitly name competing tools (e.g. add_note, add_to_network) to route between, so it stops short of full alternative coverage.

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

update_scheduled_taskB
Idempotent
Inspect

Update, pause, or resume one noticed agent task. Pass schedule_kind and schedule_value together when changing its timing.

NameRequiredDescriptionDefault
idYes
nameNo
promptNo
enabledNo
timezoneNo
schedule_kindNo
schedule_valueNo

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already mark the operation as non-read-only, idempotent, and non-destructive; the description is consistent with these and adds pause/resume semantics plus the schedule-pairing constraint. It does not disclose side effects such as whether unspecified fields are left unchanged, what gets overwritten, or what the response contains.

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 only two sentences, starts with the primary purpose, and includes an important constraint without filler. The ambiguous word 'noticed' keeps it from being perfectly clear, but the length and structure are appropriate.

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

Completeness2/5

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

For a 7-parameter mutating tool with 0% schema description coverage, this is under-specified: it omits partial-update behavior, the relationship between pause/resume and the enabled field, timezone syntax, and schedule format expectations. Sibling names and output schema help, but the description alone is not enough for correct use.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate, but it only explains the schedule_kind/schedule_value relationship. The remaining parameters (id, name, prompt, enabled, timezone) receive no semantic explanation, and schedule_value's expected format is not described.

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 clear verb and resource: 'Update, pause, or resume one ... agent task.' It is not a tautology and the operation is distinct from sibling create/delete/list tools. However, 'noticed agent task' is vague and the description does not clarify which task attributes besides timing can be changed.

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?

It gives one explicit usage rule: pass schedule_kind and schedule_value together when changing timing. It implies this tool is for modifying an existing task, but it does not state when to prefer it over create_scheduled_task or delete_scheduled_task, nor does it give any 'when not to use' guidance.

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

update_team_descriptionA
DestructiveIdempotent
Inspect

Update or clear a noticed Team description. Only Team owners and admins can use this. The description is shown to Team members and becomes data-only context for that Team's noticed agent conversations. Pass an empty string to clear it.

NameRequiredDescriptionDefault
team_idYesExact Team organization id from account_status.
descriptionYesTeam description, or an empty string to clear it.

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A4.7/5.0
Behavior5/5

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

The description adds meaningful behavioral context beyond the annotations: it discloses the auth requirement, that the description is shown to Team members, that it becomes data-only context for agent conversations, and that an empty string clears it. This complements the destructiveHint and idempotentHint without contradicting them.

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

Conciseness5/5

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

The description is compact and front-loaded: it states the operation first, then permissions, then effects and clearing behavior. Every sentence earns its place with no repetition or 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?

For a 2-parameter tool with high schema coverage, an output schema, and annotations covering safety, the description is complete. It gives the agent enough to decide, invoke, and understand consequences.

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 100%, providing a baseline of 3, but the description adds semantic value by explaining the role of the description value in agent conversations and emphasizing the clear behavior with an empty string. This goes slightly beyond the schema's own parameter descriptions.

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 uses a specific verb pair ('Update or clear') and a specific resource ('noticed Team description'), making it immediately distinguishable from sibling update_* tools. It also explains what the description is for, adding context beyond the tool name.

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?

The description clearly states the permission prerequisite ('Only Team owners and admins can use this') and the practical context for the tool. It does not explicitly name sibling alternatives or when-not-to-use conditions, but the resource is distinct enough that no close alternative exists.

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

update_viewA
DestructiveIdempotent
Inspect

Rename a View or replace its saved definition. Identify it by view_id or an unambiguous view_name.

NameRequiredDescriptionDefault
nameNoNew View name.
view_idNoThe View id. Pass this OR view_name.
view_nameNoThe View name, matched case-insensitively. Pass this OR view_id.
definitionNo

Output Schema

NameRequiredDescription
okYesWhether noticed completed the operation.
dataNoThe operation result when ok is true.
errorNoA human-readable error when ok is false.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already carry destructive/read-only hints, and the description usefully clarifies that the saved definition and current name are the affected data. The 'unambiguous view_name' warning helps prevent accidental updates to the wrong view.

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-load the operation and then cover identifier disambiguation. There is no redundant restatement of the tool title or schema content.

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 an update tool with rich schema definitions, this description captures what to change, how to identify the target, and the important ambiguity caveat. It leaves subtle questions like simultaneous rename-and-replace unspecified, but the schema and annotations fill most gaps.

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 schema already covers most parameter meanings, but the description adds meaningful selection guidance: choose view_id or a view_name that is unambiguous, and confirms that name/definition are the updatable aspects. This goes beyond the schema's literal param notes.

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

Purpose5/5

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

The description states a specific verb and resource: it can rename a View or replace its saved definition. This distinguishes it from create_view, get_view, delete_view, and list_views without restating the title.

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?

The description clearly implies this is for updating an existing View, and it gives concrete identifier guidance: use view_id or an unambiguous view_name. It does not explicitly name alternative tools, but the intended usage is clear.

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. 1 tool update
    • Changedget_person1 field changed
      • changedInput schema / properties / team_id / description
        Previous value: -"For scope:'team' — the team_id from account_status.teams. Optional when you're in exactly one team; required otherwise."New value: +"For scope:'team' — one team's team_id (from account_status.teams) to read only that team's record. Omit it to combine the record across every team you're in."
  2. 4 tool updates
    • Changedlist_actions1 field changed
      • changedInput schema / properties / team_id / description
        Previous value: -"For scope:'team' — the team_id from account_status.teams. Optional when you belong to exactly one team; required otherwise."New value: +"For scope:'team' — one team's team_id from account_status.teams. Omit it to read every team you're in."
    • Changednetwork_summary1 field changed
      • changedInput schema / properties / team_id / description
        Previous value: -"For scope:'team' — the team_id from account_status.teams. Optional when you're in exactly one team; required otherwise."New value: +"For scope:'team' — one team's team_id (from account_status.teams). Omit it to summarize every team you're in: `total` counts a person two teams share once and `teams` has one summary per team."
    • Changedresolve_person1 field changed
      • changedInput schema / properties / team_id / description
        Previous value: -"For scope:'team' — the team to search (from account_status.teams). Optional when you're in exactly one team; required to pick when you're in more than one. A team you don't belong to is rejected."New value: +"For scope:'team' — one team to search (from account_status.teams). Omit it to resolve across every team you're in. A team you don't belong to is rejected."
    • Changedsearch_people1 field changed
      • changedInput schema / properties / team_id / description
        Previous value: -"For scope:'team' — the team_id of the team to search (from account_status.teams). Optional when you're in exactly one team; required to pick when you're in more than one. A team you don't belong to is rejected."New value: +"For scope:'team' — the team_id of one team to search (from account_status.teams). Omit it to search every team you're in (a person several teams share is one hit, with all their `team_ids`). A team you don't belong to is rejected."
  3. 10 tool updates
    • Changedcreate_list1 field changed
      • changedInput schema / properties / organization_id / description
        Previous value: -"Creates a TEAM list owned by that organization (from account_status.teams). Omit for a personal list."New value: +"Creates a TEAM list owned by that Team (its team_id from account_status.teams). Omit for a personal list."
    • Changedenrich_person2 fields changed
      • addedInput schema / properties / confirmation_token / description
        Added value: +"Only from a needs_duplicate_confirmation response for new_person: pass it back to create the relationship despite the listed potential duplicates."
      • changedInput schema / properties / new_person / description
        Previous value: -"Create a new own-network relationship before enrichment."New value: +"Create a new own-network relationship before enrichment. Requires email or linkedin_url; not allowed with scope 'team'. Pass exactly one of person_id or new_person."
    • Changedget_person2 fields changed
      • changedInput schema / properties / compared_to / description
        Previous value: -"Optional second person_id — adds a shared_signals section."New value: +"Optional second person_id from your own network — adds a shared_signals section. Ignored for scope:'team' records."
      • changedInput schema / properties / team_id / description
        Previous value: -"For scope:'team' — the organizationId (from account_status.teams). Optional when you're in exactly one team; required otherwise."New value: +"For scope:'team' — the team_id from account_status.teams. Optional when you're in exactly one team; required otherwise."
    • Changedlist_actions1 field changed
      • changedInput schema / properties / team_id / description
        Previous value: -"For scope:'team' — the organizationId from account_status.teams. Optional when you belong to exactly one team; required otherwise."New value: +"For scope:'team' — the team_id from account_status.teams. Optional when you belong to exactly one team; required otherwise."
    • Changedlist_intros1 field changed
      • changedInput schema / properties / limit / description
        Previous value: -"Max rows (default 50)."New value: +"Max rows (default 50, max 200)."
    • Changedlog_interaction1 field changed
      • changedInput schema / properties / occurred_at / description
        Previous value: -"When it HAPPENED (ISO timestamp). Omit → defaults to now. Pass null for undated items (e.g. open-ended follow-ups) — the timeline then shows only when it was recorded."New value: +"When it HAPPENED (ISO timestamp) — resolve relative dates like 'yesterday' to a timestamp. Omit → defaults to now. Pass null only when a past interaction's date is genuinely unknown — the timeline then shows only when it was recorded."
    • Changedmemory_search1 field changed
      • changedInput schema / properties / maxResults / description
        Previous value: -"Max results."New value: +"Max results (default 5)."
    • Changednetwork_summary1 field changed
      • changedInput schema / properties / team_id / description
        Previous value: -"For scope:'team' — the organizationId (from account_status.teams). Optional when you're in exactly one team; required otherwise."New value: +"For scope:'team' — the team_id from account_status.teams. Optional when you're in exactly one team; required otherwise."
    • Changedsearch_people6 fields changed
      • changedInput schema / properties / company / description
        Previous value: -"Filter by company (matches current + former employers)."New value: +"Filter by company — substring match on current OR former employers (each hit's `company_match` says which). In scope:'public' only the current company is checked."
      • changedInput schema / properties / limit / description
        Previous value: -"Page size (default 25, max 200 for own / 50 for public)."New value: +"Page size (own/team: default 25, max 200; public: default 40, max 50)."
      • changedInput schema / properties / location / description
        Previous value: -"Filter by location (substring match)."New value: +"Filter by location (substring match; common aliases such as NYC/New York, SF/Bay Area, Lisbon/Lisboa expand)."
      • changedInput schema / properties / q / description
        Previous value: -"Free-text query — matched OR-style against name, headline, company, location, skills, languages, topics, bio and linked-profile text (your own people also on your notes, tags and history; teammates' people never on theirs). The same matching applies to scope:'own' and scope:'team'. Operators narrow: uppercase AND between terms requires all of them; a +term prefix requires just that term (e.g. '+health medtech'). In scope:'public', operators only affect the your-network half of results; global hits are matched by semantic similarity."New value: +"Free-text query. Each term is matched (substring, accent-insensitive) against name, headline, current company, location, skills, GitHub repo languages/topics, bio, every linked account's names/usernames/headlines/bios and past roles (company + title). Your own people also match your recorded interactions, memories, notes and tags; a teammate's people (scope:'team') match only their public profile text, never the teammate's private history, notes or tags. Name hits rank highest; bio, past-role, note and tag hits rank lowest. Terms are OR-matched; operators narrow: uppercase AND between terms requires all of them; a +term prefix requires just that term (e.g. '+health medtech'). Optional in scope:'own'/'team' (omit to browse with filters). In scope:'public', operators only affect the your-network half of results; global hits are matched by semantic similarity."
      • changedInput schema / properties / role / description
        Previous value: -"Filter by function (matched against headline): engineer, designer, product, gtm, founder, recruiter, investor, other. `gtm` covers sales/growth/marketing/partnerships/biz-dev; `other` is the catch-all for customer success, operations, legal, academia, etc. Matches any of the listed roles. Seniority (CEO, CTO, VP, etc.) is not a function — pass it in `q` instead."New value: +"Filter by function (matched against the headline and, in your own network, past titles): engineer, designer, product, gtm, founder, recruiter, investor, other. `gtm` covers sales/growth/marketing/partnerships/biz-dev; `other` is the catch-all for customer success, operations, legal, academia, etc. Matches any of the listed roles. Seniority (CEO, CTO, VP, etc.) is not a function — pass it in `q` instead."
      • changedInput schema / properties / team_id / description
        Previous value: -"For scope:'team' — the organizationId of the team to search (from account_status.teams). Optional when you're in exactly one team; required to pick when you're in more than one. A team you don't belong to is rejected."New value: +"For scope:'team' — the team_id of the team to search (from account_status.teams). Optional when you're in exactly one team; required to pick when you're in more than one. A team you don't belong to is rejected."
    • Changedtrack_intro1 field changed
      • changedInput schema / properties / resolved_person_id / description
        Previous value: -"The real contact's person id once the intro happened — implies status done."New value: +"The real contact's person id once the intro happened — implies status done unless you pass a status explicitly."
  4. 2 tool updates
    • Changedresolve_person2 fields changed
      • addedInput schema / properties / scope
        Added value: +{
        +  "description": "'own' (default) — your network. 'team' — your POOLED TEAM network, as in search_people.",
        +  "enum": [
        +    "own",
        +    "team"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / team_id
        Added value: +{
        +  "description": "For scope:'team' — the team to search (from account_status.teams). Optional when you're in exactly one team; required to pick when you're in more than one. A team you don't belong to is rejected.",
        +  "type": "string"
        +}
    • Changedsearch_people3 fields changed
      • changedInput schema / properties / q / description
        Previous value: -"Free-text query — matched OR-style against name, headline, company, location, skills. Operators narrow your own network: uppercase AND between terms requires all of them; a +term prefix requires just that term (e.g. '+health medtech'). In scope:'public', operators only affect the your-network half of results; global hits are matched by semantic similarity."New value: +"Free-text query — matched OR-style against name, headline, company, location, skills, languages, topics, bio and linked-profile text (your own people also on your notes, tags and history; teammates' people never on theirs). The same matching applies to scope:'own' and scope:'team'. Operators narrow: uppercase AND between terms requires all of them; a +term prefix requires just that term (e.g. '+health medtech'). In scope:'public', operators only affect the your-network half of results; global hits are matched by semantic similarity."
      • changedInput schema / properties / scope / description
        Previous value: -"'own' (default) — your network only. 'public' — global match + warm-intro paths to people you don't know yet. 'team' — your POOLED TEAM network (people known by ANY teammate); each hit carries `team_members` (who on the team knows them + their consent-gated strength)."New value: +"'own' (default) — your network only. 'public' — global match + warm-intro paths to people you don't know yet. 'team' — your POOLED TEAM network (people known by ANY teammate), with the same filters and exact `total` as 'own' (no cap; page with offset/limit). Each team hit carries `team_members` (who on the team knows them, their consent-gated strength and teams), `team_ids`, and `primary_team_id` — pass that as get_person's team_id."
      • addedOutput schema / properties / data / properties / teams
        Added value: +{
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "id": {
        +        "type": "string"
        +      },
        +      "name": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "id",
        +      "name"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
  5. 3 tool updates
    • Changedenrich_person3 fields changed
      • changedInput schema / properties / client_request_id / description
        Previous value: -"Stable idempotency key; required for name-only new-person research."New value: +"Stable idempotency key for creating a new relationship."
      • removedInput schema / properties / mode
        Removed value: -{
        -  "description": "Fast is the default deterministic lookup; research starts a live agent-led search session.",
        -  "enum": [
        -    "fast",
        -    "research"
        -  ],
        -  "type": "string"
        -}
      • changedOutput schema / properties / data / properties / status / enum
        Previous value: -[
        -  "started",
        -  "in_progress",
        -  "recently_enriched",
        -  "not_eligible",
        -  "needs_duplicate_confirmation",
        -  "research_required"
        -]New value: +[
        +  "started",
        +  "in_progress",
        +  "recently_enriched",
        +  "not_eligible",
        +  "needs_duplicate_confirmation"
        +]
    • Removedsearch_enrichment_web
    • Removedsubmit_enrichment_research
  6. 1 tool update
    • Changedcorrect_person_claim1 field changed
      • addedInput schema / properties / rejection_scope
        Added value: +{
        +  "description": "For reject only. Default claim rejects that proposition. Use source_identity only when the user explicitly rejects ownership of the cited source or account: all its facts are excluded. Use record_identity only when the user explicitly rejects the cited record while preserving other records on that page. Never infer this narrower scope from table layout.",
        +  "enum": [
        +    "claim",
        +    "source_identity",
        +    "record_identity"
        +  ],
        +  "type": "string"
        +}
  7. 1 tool update
    • Changedresearch_person4 fields changed
      • changedInput schema / properties / limits / properties / agents / maximum
        Previous value: -12New value: +24
      • changedInput schema / properties / limits / properties / modelCalls / maximum
        Previous value: -48New value: +160
      • changedInput schema / properties / limits / properties / sourceRequests / maximum
        Previous value: -72New value: +144
      • changedInput schema / properties / limits / properties / tokens / maximum
        Previous value: -200000New value: +3000000
  8. 6 tool updates
    • Addedcancel_research
    • Addedcorrect_person_claim
    • Changedget_person3 fields changed
      • addedInput schema / properties / cursors
        Added value: +{
        +  "additionalProperties": {
        +    "maxLength": 2000,
        +    "type": "string"
        +  },
        +  "description": "Per-section nextCursor values from the previous read; restart a section when its source version changes.",
        +  "propertyNames": {
        +    "enum": [
        +      "identity",
        +      "background",
        +      "work",
        +      "recognition",
        +      "direction",
        +      "relationships",
        +      "notes",
        +      "actions",
        +      "timeline",
        +      "research"
        +    ]
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "description": "Maximum items per requested section, default 10. Follow nextCursor to retrieve the rest.",
        +  "maximum": 100,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / sections
        Added value: +{
        +  "description": "Knowledge sections to read. Each returns a bounded page, completeness state and continuation cursor.",
        +  "items": {
        +    "enum": [
        +      "identity",
        +      "background",
        +      "work",
        +      "recognition",
        +      "direction",
        +      "relationships",
        +      "notes",
        +      "actions",
        +      "timeline",
        +      "research"
        +    ],
        +    "type": "string"
        +  },
        +  "maxItems": 10,
        +  "type": "array"
        +}
    • Changedmy_profile4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / cursors
        Added value: +{
        +  "additionalProperties": {
        +    "maxLength": 2000,
        +    "type": "string"
        +  },
        +  "description": "Per-section nextCursor values from the previous read; restart a section when its source version changes.",
        +  "propertyNames": {
        +    "enum": [
        +      "identity",
        +      "background",
        +      "work",
        +      "recognition",
        +      "direction",
        +      "relationships",
        +      "notes",
        +      "actions",
        +      "timeline",
        +      "research"
        +    ]
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "description": "Maximum items per requested section, default 10. Follow nextCursor to retrieve the rest.",
        +  "maximum": 100,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / sections
        Added value: +{
        +  "description": "Knowledge sections to read. Each returns a bounded page, completeness state and continuation cursor.",
        +  "items": {
        +    "enum": [
        +      "identity",
        +      "background",
        +      "work",
        +      "recognition",
        +      "direction",
        +      "relationships",
        +      "notes",
        +      "actions",
        +      "timeline",
        +      "research"
        +    ],
        +    "type": "string"
        +  },
        +  "maxItems": 10,
        +  "type": "array"
        +}
    • Addedresearch_person
    • Addedresearch_status
  9. 4 tool updates
    • Changedenrich_person12 fields changed
      • addedInput schema / properties / batch_id
        Added value: +{
        +  "description": "Opportunity List id for resumable enrichment.",
        +  "format": "uuid",
        +  "type": "string"
        +}
      • addedInput schema / properties / client_request_id
        Added value: +{
        +  "description": "Stable idempotency key; required for name-only new-person research.",
        +  "format": "uuid",
        +  "type": "string"
        +}
      • addedInput schema / properties / confirmation_token
        Added value: +{
        +  "type": "string"
        +}
      • addedInput schema / properties / mode
        Added value: +{
        +  "description": "Fast is the default deterministic lookup; research starts a live agent-led search session.",
        +  "enum": [
        +    "fast",
        +    "research"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / new_person
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Create a new own-network relationship before enrichment.",
        +  "properties": {
        +    "email": {
        +      "format": "email",
        +      "type": "string"
        +    },
        +    "linkedin_url": {
        +      "format": "uri",
        +      "type": "string"
        +    },
        +    "name": {
        +      "minLength": 2,
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "name"
        +  ],
        +  "type": "object"
        +}
      • changedInput schema / properties / person_id / description
        Previous value: -"The noticed person to enrich."New value: +"An existing noticed person to enrich."
      • addedInput schema / properties / scope
        Added value: +{
        +  "description": "Use team for a fully shared Team relationship.",
        +  "enum": [
        +    "own",
        +    "team"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / team_id
        Added value: +{
        +  "description": "Team id; required when you belong to multiple Teams.",
        +  "format": "uuid",
        +  "type": "string"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "person_id"
        -]
      • addedOutput schema / properties / data / properties / reason
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / properties / data / properties / status / enum
        Previous value: -[
        -  "started",
        -  "in_progress",
        -  "recently_enriched",
        -  "not_eligible"
        -]New value: +[
        +  "started",
        +  "in_progress",
        +  "recently_enriched",
        +  "not_eligible",
        +  "needs_duplicate_confirmation",
        +  "research_required"
        +]
      • changedOutput schema / properties / data / required
        Previous value: -[
        -  "status",
        -  "person_id",
        -  "available"
        -]New value: +[
        +  "status"
        +]
    • Addedenrichment_batch_status
    • Addedsearch_enrichment_web
    • Addedsubmit_enrichment_research
  10. 4 tool updates
    • Addedconfigure_list_review
    • Changedcreate_list3 fields changed
      • addedOutput schema / properties / data / properties / canonical_url
        Added value: +{
        +  "format": "uri",
        +  "type": "string"
        +}
      • addedOutput schema / properties / data / properties / review_url
        Added value: +{
        +  "format": "uri",
        +  "type": "string"
        +}
      • changedOutput schema / properties / data / required
        Previous value: -[
        -  "list_id",
        -  "name"
        -]New value: +[
        +  "list_id",
        +  "name",
        +  "canonical_url",
        +  "review_url"
        +]
    • Changedget_list10 fields changed
      • addedInput schema / properties / page
        Added value: +{
        +  "description": "1-based member page; default 1.",
        +  "exclusiveMinimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / page_size
        Added value: +{
        +  "description": "Members per page; default 25, maximum 200.",
        +  "maximum": 200,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedOutput schema / properties / data / properties / canonical_url
        Added value: +{
        +  "format": "uri",
        +  "type": "string"
        +}
      • addedOutput schema / properties / data / properties / member_has_more
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / data / properties / member_page
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / data / properties / member_page_size
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / data / properties / member_total
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / data / properties / rejected_person_ids
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / data / properties / review_url
        Added value: +{
        +  "format": "uri",
        +  "type": "string"
        +}
      • changedOutput schema / properties / data / required
        Previous value: -[
        -  "list_id",
        -  "name",
        -  "members",
        -  "suggestions",
        -  "pending_total"
        -]New value: +[
        +  "list_id",
        +  "name",
        +  "canonical_url",
        +  "review_url",
        +  "member_total",
        +  "member_has_more",
        +  "member_page",
        +  "member_page_size",
        +  "rejected_person_ids",
        +  "members",
        +  "suggestions",
        +  "pending_total"
        +]
    • Addedget_list_reviews
  11. 2 tool updates
    • Addedenrich_person
    • Changedget_person1 field changed
      • addedOutput schema / properties / data / properties / enrichment
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "available": {
        +      "type": "boolean"
        +    },
        +    "next_enrichment_at": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "status": {
        +      "enum": [
        +        "available",
        +        "pro_team_required",
        +        "not_found",
        +        "no_email",
        +        "in_progress",
        +        "recently_enriched"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "available",
        +    "status",
        +    "next_enrichment_at"
        +  ],
        +  "type": "object"
        +}
  12. 1 tool update
    • Changedcreate_list1 field changed
      • changedInput schema / properties / ai_enabled / description
        Previous value: -"Whether noticed suggests people for this list (default true)."New value: +"Whether noticed suggests people for this list (default false)."
  13. 2 tool updates
    • Changedadd_to_network1 field changed
      • changedInput schema / properties / relationship_types / description
        Previous value: -"How you know this person, from the closed set: family, close_friend, friend, coworker, ex_coworker, advisor_investor, customer, vendor, acquaintance. Values outside this set are dropped. Set it here at add time — no follow-up update_person needed."New value: +"How you know this person, from the closed set: family, close_friend, friend, acquaintance, coworker, alumni, customer, vendor, advisor, investor. Values outside this set are dropped. Coworker and Alumni may be inferred from reliable shared history; all other roles require an explicit user statement. Set it here at add time — no follow-up update_person needed."
    • Changedupdate_person3 fields changed
      • changedInput schema / properties / relationship_types / description
        Previous value: -"How you know this person, from the closed set: family, close_friend, friend, coworker, ex_coworker, advisor_investor, customer, vendor, acquaintance. Values outside this set are dropped."New value: +"How you know this person, from the closed set: family, close_friend, friend, acquaintance, coworker, alumni, customer, vendor, advisor, investor. Full editable selection; omitted automatic types are rejected on future refresh. Use add/remove for partial corrections. All roles except Coworker and Alumni require an explicit user statement."
      • addedInput schema / properties / relationship_types_add
        Added value: +{
        +  "description": "Add types without replacing unrelated selections. A personal choice replaces the previous personal choice. Explicit add clears an automatic-tag rejection. Coworker and Alumni may be automatic; all other roles require an explicit user statement.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "maxItems": 50,
        +  "type": "array"
        +}
      • addedInput schema / properties / relationship_types_remove
        Added value: +{
        +  "description": "Remove types without replacing unrelated selections. Removing Coworker or Alumni persists a rejection across automatic refreshes. If a type is both added and removed, removal wins.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "maxItems": 50,
        +  "type": "array"
        +}
  14. 1 tool update
    • Addedupdate_team_description

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Remote MCP server that lets AI assistants read tracked competitive intelligence — competitor news, reviews, website changes, social posts and ads — and act on it by managing projects, competitors, battle cards, reports and canvases. Every answer carries a source and a date, and write actions only publish when explicitly shared.
    MIT
  • 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
    23 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