noticed
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.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
Available Tools
57 toolsaccept_identity_matchADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| person_a | No | persons.id — alternative to candidate_id; pass with person_b. | |
| person_b | No | persons.id — pass with person_a. | |
| profile_a | No | Source-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_b | No | Source-prefixed profile id (e.g. github:123) — the profile_b from list_identity_matches. Pass with profile_a. | |
| candidate_id | No | merge_candidates id of a pending match (the candidate_id from list_identity_matches). | |
| confirmation_token | No | Returned 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
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
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.
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.
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.
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.
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.
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_suggestionADestructiveInspect
Accept one pending add/remove suggestion for a list. A suggested add becomes a member; a suggested removal is removed.
| Name | Required | Description | Default |
|---|---|---|---|
| list_id | No | The list id. Pass this OR list_name. | |
| list_name | No | The list name, matched case-insensitively. Pass this OR list_id. | |
| person_id | Yes | The person id on the pending suggestion. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
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.
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.
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.
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.
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.
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_statusARead-onlyIdempotentInspect
Check connected accounts across the noticed browser extension and native iOS embedded-browser sessions. Use this to see whether LinkedIn and X are connected, pairing, syncing, synced, partially synced, or need attention.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
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 safe read-only nature is covered. The description adds useful behavioral context by listing the possible connection/sync states and specifying the two session contexts (browser extension and iOS embedded-browser), which goes beyond the annotations 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The action ('Check connected accounts') is front-loaded, followed immediately by the intended use case and the specific statuses. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only status check with an output schema present, the description is fully sufficient. It states what is checked, which platforms are covered, and the kinds of states the agent should look for, so no critical information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 on the description. A score of 4 is the baseline for a no-parameter tool, and the description does not need to compensate for any schema gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Check') and resource ('connected accounts across the noticed browser extension and native iOS embedded-browser sessions'), and it names the specific platforms (LinkedIn and X). It is clear in what it does, but it does not explicitly distinguish itself from the similar sibling tool 'get_connected_source_status', which may be the per-source counterpart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes an explicit usage directive: 'Use this to see whether LinkedIn and X are connected, pairing, syncing, synced, partially synced, or need attention.' This tells the agent when to invoke it, but it does not mention when not to use it or mention alternatives like 'get_connected_source_status' or 'sync_connected_source'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_memoryAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Optional tags. | |
| content | Yes | The memory. @mention a name in your network to link them. | |
| person_id | Yes | The person this memory is about. | |
| occurred_at | No | The 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_via | No | The 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
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already communicate that this is a write operation (readOnlyHint false), non-destructive (destructiveHint false), and idempotent (idempotentHint true). The description adds valuable context: memories are stored in relationship.memories, can be linked via @mention, and are read via get_person. It doesn't contradict annotations. Slightly more detail on idempotent behavior could elevate it, but it's already strong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Though a bit longer than typical, every sentence earns its place. It front-loads the core purpose, then immediately gives alternatives, linking behavior, retrieval method, and the general-fact case. There is no fluff or redundancy; the structure is logical and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 params, 2 required) and an output schema, the description covers everything an agent needs for correct invocation: definition, distinguishing rules, linking via @mention, retrieval path, and alternative tool usage. The existence of an output schema covers return value expectations, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters are documented in the schema itself. The description adds limited new meaning—it reinforces that @mention in content links to your network, but this is also in the schema. Since the schema does the heavy lifting, the description adds marginal value, aligning with the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's verb and resource: 'Save a MEMORY about a SPECIFIC person'. It further distinguishes its purpose from siblings by defining what constitutes a memory (something you inferred, not user-told) and explicitly names add_note and memory_save as alternatives. This makes the tool's role unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use and when-not-to-use guidance. It states: 'If the user ASKED you to remember it, it's their note, not your memory — use add_note' and 'For a general fact not about one person, use memory_save instead.' It also tells how to read memories back via get_person. This leaves no ambiguity about selecting this tool over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_noteAIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Optional tags. | |
| content | Yes | The note, in the user's words. @mention a name in your network to link them. | |
| person_id | Yes | The person this note is about. | |
| occurred_at | No | The 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_via | No | The 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
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, setting the write-safety profile. The description adds behavioral context: 'The note is theirs; you're just the keyboard' clarifies authorship, and 'Read them back via get_person' explains how the note is retrieved. It does not contradict annotations and adds useful nuance beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is slightly longer than minimal but every sentence adds value: examples, differentiation, and omission guidance are all present. It front-loads the primary action and uses plain language, making it easy to parse without wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity, full schema coverage, and an existing output schema signal, the description covers when to use it, how to anchor data (occurred_at), how to link people (@mention), and how to retrieve notes. No critical guidance is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all params are documented, but the description enriches meaning: it explains @mention usage in content, clarifies occurred_at as the date the note refers to with a practical example, and specifies captured_via for skill-driven writes. This exceeds the baseline of 3 by adding usage context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Write a NOTE on a person's record' with a specific verb and resource, and explicitly differentiates from add_memory by contrasting user-provided content versus agent-derived reasoning. The examples ('remember Rita prefers async') make the scope unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use: 'whenever they ask you to remember, note, or jot something down' and when-not-to-use: 'If YOU worked something out on your own... use add_memory.' It also mentions alternative read-back via get_person, covering the full usage lifecycle.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_profile_to_personADestructiveInspect
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. If that profile is already in noticed it matches + merges them into one record (a contested match is held for an admin); if it's new, noticed queues it to fetch + enrich, then match. Use to ENRICH a thin contact — not to merge two existing records (that's accept_identity_match / suggest_identity_match).
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | A LinkedIn (linkedin.com/in/…) OR GitHub (github.com/…) URL for that person — one or the other. | |
| person_id | Yes | persons.id of the contact to attach a profile to (from list_profile_gaps / search_people / get_person). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description details the behavior in two scenarios: existing profile (matches and merges with admin hold) and new profile (queues to fetch and enrich). This goes beyond the basic readOnly/destructive hints, providing transparency about potential actions and outcomes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is reasonably concise but includes some redundancy (e.g., repeating 'Give noticed' and 'Pass person_id + the url'). It is structured with action, parameters, behavior, and usage. Could be tightened but is not excessively verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the purpose, usage conditions, expected behavior in different scenarios, and explicitly distinguishes from alternatives. It is comprehensive for the tool's functionality, and the presence of an output schema means return value details are not required in the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
While the schema provides clear descriptions for both parameters, the tool description reinforces the intended context (contact missing a profile) and reiterates the requirement to provide both. It adds a slight semantic nuance but not significantly beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the action (adding a profile via URL) and the target (contact missing a profile). It also clarifies the intended use case (enrich thin contact) and distinguishes from alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 (for enriching a thin contact) and when not to (for merging existing records, pointing to accept_identity_match / suggest_identity_match). It also references list_profile_gaps context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_to_listAIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| list_id | No | The list's id (from list_lists / create_list). Pass this OR list_name. | |
| list_name | No | The list's name, matched case-insensitively. Pass this OR list_id. | |
| person_id | Yes | The person's id (from search_people / resolve_person / get_person). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
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.
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.
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.
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.
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.
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_networkAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Initial 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_form | No | A brand-new contact to create + track. Use when there is no person_id. | |
| person_id | No | person_id of an existing search_people hit to start tracking. | |
| custom_name | No | Your own display name for this person. | |
| confirmation_token | No | From 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_types | No | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses significant behavioral nuance beyond the annotations: the dedupe mechanism (returns created:false, potential_duplicates, and confirmation_token instead of creating), the condition to re-call with confirmation_token only for genuinely new people, and that relationship_types outside the closed set are dropped. It also states the return of a canonical person_id. These details are critical for correct invocation and are not evident 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense yet efficient. It front-loads the core purpose, then methodically covers modes, parameters, return value, and dedupe behavior. Every sentence contributes unique information without redundancy, and the structure guides the agent from selection to invocation to edge-case handling.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 6 parameters, a nested object, an output schema, and non-trivial dedupe behavior, the description covers all necessary aspects: input mode selection, parameter relationships, validation rules, return values, and the confirmation flow. The presence of an output schema means return-value details need not be spelled out, yet the description still highlights the canonical person_id. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 100% schema coverage, the description adds crucial semantic context: it clarifies that person_id and free_form are mutually exclusive (OR), explains the confirmation_token's role in the dedupe flow, and positions relationship_types as settable at add time. This goes beyond the schema's individual parameter descriptions and directly facilitates correct usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb and resource: 'Add someone to your network.' It then distinguishes two modes — known persons via person_id become tracked, while new contacts are created/imported and tracked. This precisely scopes the tool and differentiates it from siblings like update_person and remove_from_network.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use each input mode: use person_id for known search_people hits, free_form for brand-new contacts. It also notes that relationship_types can be set at add time, eliminating a follow-up update_person call. While it doesn't name alternative tools directly, the contextual cues (e.g., 'no follow-up update_person needed') effectively guide selection. A slightly more explicit exclusion of update_person for relationship settings would push this to 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
complete_actionAIdempotentInspect
Mark a follow-up / action done. Get the action_id from get_person (relationship.actions).
| Name | Required | Description | Default |
|---|---|---|---|
| action_id | Yes | The action to complete. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description aligns with the annotations (readOnlyHint=false, idempotentHint=true) without contradiction. It does not add extra detail about side effects or idempotency beyond what annotations already convey, but the action is simple and well-covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, directly stating the purpose and providing a source for the parameter. No fluff or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter action, the description is complete. It covers what to do and where to get the ID. No output schema is given, so return values need not be explained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only says 'The action to complete', but the description adds valuable context: 'Get the action_id from get_person (relationship.actions)'. This enriches the parameter meaning significantly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'mark' and the resource 'follow-up / action done', making the tool's purpose unambiguous. It distinguishes itself from siblings like update_action and delete_action by focusing on the 'complete' action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a specific usage hint: 'Get the action_id from get_person (relationship.actions)', guiding where to source the ID. It does not explicitly contrast with alternatives like update_action, but the purpose is clear enough for typical use.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Optional tags. | |
| content | Yes | What needs doing. @mention a name in your network to link them. | |
| team_id | No | Selected Team organization id from account_status. Required with assigned_to; connected Team chats supply it automatically. | |
| person_id | Yes | The person this follow-up is about. | |
| remind_at | No | RECOMMENDED date to revisit or complete this action (ISO timestamp). Omit only for genuinely open-ended work. | |
| assigned_to | No | RECOMMENDED for Team actions: exact teammate name, email, or user id. Omit only when ownership is genuinely undecided. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
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.
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.
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.
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.
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.
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'): noticed then proposes people from the network to add, and the user confirms or rejects each one. The title is auto-generated from the description unless you pass a name. Returns the new list_id.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Short title for the list; auto-generated from the description when omitted. | |
| ai_enabled | No | Whether noticed suggests people for this list (default true). | |
| description | Yes | What 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_id | No | Creates a TEAM list owned by that organization (from account_status.teams). Omit for a personal list. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate non-readOnly, non-idempotent behavior. The description goes beyond that by disclosing the full workflow: noticed proposes people from the network and the user confirms/rejects each one. It also states the return value (list_id) and the auto-generation of the title, providing transparent behavioral context that annotations do not.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately long but each sentence serves a purpose: it defines purpose, stresses the criticality of the description, explains the matching flow, and mentions the auto-title. It is front-loaded with the core purpose and does not ramble, though it could be tightened slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a create operation with an output schema and complete parameter documentation, the description supplies everything an agent needs: the purpose, the required parameter's semantics, the optional parameters' behavior, the workflow, and the return value. No essential information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds meaning: it explains why the description parameter is required and what happens if it is vague, and it reiterates the auto-title behavior for the name parameter. This goes beyond the schema's own property descriptions and helps the agent craft effective input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb-resource pair ('Create a list') and defines what a list is ('a described set of people'), distinguishing it from sibling tools like add_to_list (which adds to an existing list) and delete_list. The resource and action are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives strong guidance on how to write the required description parameter (be specific, as it drives matching) and mentions that name is optional because the title auto-generates. It does not explicitly contrast with alternatives, but the create action is self-evident and the context is clear.
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'.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Human-readable task name. | |
| prompt | Yes | ||
| enabled | No | ||
| timezone | No | ||
| schedule_kind | Yes | ||
| schedule_value | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Short View name; generated when omitted. | |
| definition | Yes | ||
| description | Yes | What this View is for. | |
| organization_id | No | Team id for a Team View; omit for personal. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
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.
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.
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.
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.
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.
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_actionADestructiveIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| action_id | Yes | The action to permanently delete (from get_person → relationship.actions or list_actions). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
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.
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.
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.
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.
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.
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_listADestructiveInspect
Permanently delete a list and its membership/suggestion ledger. People remain in the network. Identify it by list_id or an unambiguous list_name.
| Name | Required | Description | Default |
|---|---|---|---|
| list_id | No | The list id. Pass this OR list_name. | |
| list_name | No | The list name, matched case-insensitively. Pass this OR list_id. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
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.
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.
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.
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.
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.
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_taskADestructiveInspect
Permanently delete one noticed agent task and its run history. Use update_scheduled_task with enabled:false to pause it instead.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
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.
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.
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.
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.
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.
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_viewADestructiveInspect
Permanently delete a saved View. This removes only the saved definition; matching people remain in the network.
| Name | Required | Description | Default |
|---|---|---|---|
| view_id | No | The View id. Pass this OR view_name. | |
| view_name | No | The View name, matched case-insensitively. Pass this OR view_id. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
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.
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.
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.
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.
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.
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_matchAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| person_a | No | persons.id — alternative to candidate_id; pass with person_b. | |
| person_b | No | persons.id — pass with person_a. | |
| profile_a | No | Source-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_b | No | Source-prefixed profile id (e.g. github:123) — the profile_b from list_identity_matches. Pass with profile_a. | |
| candidate_id | No | merge_candidates id of a pending match (the candidate_id from list_identity_matches). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
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.
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.
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.
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.
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.
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.
get_connected_source_statusARead-onlyIdempotentInspect
Inspect noticed integration sources, their safe account labels, connection state, effective sync cadence, and latest attempt or completion. Returns metadata only; use this before claiming a source is connected or current.
| Name | Required | Description | Default |
|---|---|---|---|
| source | No | Optional integration source to inspect; omit for all sources. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
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 core safety profile is covered. The description reinforces this with 'Returns metadata only' and adds useful context about the scope ('noticed integration sources') and the kind of status information exposed, but it does not reveal significant behavioral traits beyond what annotations and the output schema already convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler. The first sentence front-loads the verb, resource, and key output dimensions; the second sentence supplies the safety clarification and the intended use case. Every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with one optional parameter, full schema coverage, a rich enum, an output schema, and clear annotations, the description is complete. It gives the agent both what the tool returns and when to invoke it, leaving no necessary gap for correct use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: the single optional 'source' parameter has an enum and a clear description, including the omit-for-all-sources behavior. The tool description does not need to add parameter-level detail, and it does not meaningfully extend beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with the specific verb 'Inspect' and the resource 'noticed integration sources,' then lists the exact status fields returned: safe account labels, connection state, effective sync cadence, and latest attempt or completion. It clearly distinguishes this read-only inspection tool from mutation siblings like sync_connected_source by saying 'Returns metadata only.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'use this before claiming a source is connected or current' gives an explicit, actionable usage condition. It does not name alternative tools or explicitly say when not to use it, but the context 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.
get_connection_linkARead-onlyIdempotentInspect
Get the exact noticed connection or management experience for an integration or MCP server. For Wispr Flow use target='integration' and source='wispr-flow'. Present the returned link exactly.
| Name | Required | Description | Default |
|---|---|---|---|
| source | No | Required when target is integration. | |
| target | Yes | Connection target. | |
| mcp_url | No | Optional HTTPS remote MCP URL when target is mcp. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, covering safety. The description adds behavioral guidance by instructing 'Present the returned link exactly', which tells the agent not to modify or reformat the result. This is meaningful context beyond the annotations, though the term 'noticed' remains ambiguous.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero fluff. The main purpose is front-loaded, followed immediately by the most instructive example and a crisp output-handling directive. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter tool with a rendered output schema and safety annotations, the description covers the essential decision points: integration vs. MCP, the Wispr Flow special case, and exact presentation of the result. A minor gap is not explaining mcp_url selection behavior, but the schema fully covers that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema documents all parameters. The description adds value by giving a concrete example mapping for Wispr Flow (target='integration', source='wispr-flow'), which clarifies how the enum values should be combined, and by implying the returned value is a link to be used as-is.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get') and resource ('connection or management experience for an integration or MCP server'), and explicitly differentiates between the two target types. The Wispr Flow example further pins down the exact usage, making the tool's purpose unmistakable and distinct from 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use the tool (for retrieving connection/management links) and includes a concrete parameter mapping for Wispr Flow. It does not explicitly state exclusions or alternatives, but no sibling tool appears to overlap with this function, so the guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_instructionsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| instructions | Yes |
TDQS
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.
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.
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.
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.
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.
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_listARead-onlyIdempotentInspect
Open one list: its members (ordered by relevance to the list's goal) and the people noticed is SUGGESTING to add or remove, each with the reasoning behind it. Identify the list by list_id (from list_lists) or by list_name.
| Name | Required | Description | Default |
|---|---|---|---|
| list_id | No | The list's id (from list_lists / create_list). Pass this OR list_name. | |
| list_name | No | The list's name, matched case-insensitively. Pass this OR list_id. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and idempotent behavior. The description adds that results are ordered by relevance and include suggestion reasoning, which is not covered by annotations. No contradiction detected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence but contains a grammatical error ('people noticed is SUGGESTING') and is slightly convoluted. It could be more concise and direct.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description mentions members and suggestions but does not specify the exact return structure (e.g., whether list metadata is included). Given no output schema is provided, this is acceptable but incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides full parameter descriptions ('Pass this OR list_id'), and the description simply echoes them without adding new details. It does not clarify edge cases like mutual exclusivity or defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool opens a list and returns its members (ordered by relevance) and suggestions for additions/removals with reasoning, distinguishing it from list-mutation tools like add_to_list. However, the phrasing is awkward ('people noticed is SUGGESTING') and could be clearer.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving list contents but does not explicitly state when to prefer this over other list-related tools. It identifies parameters but lacks explicit guidance on selecting between list_id and list_name or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_personARead-onlyIdempotentInspect
One person's full record: profile, 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 carries ALL of 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), and memories (saved notes). scope:'team' opens the POOLED TEAM record for a person from a team search_people hit — who on the team knows them + their strength, and full-consent teammates' actions/notes/interactions attributed to each member. Present-tense snapshot — an empty field means not recorded, NOT false.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | '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). | |
| include | No | 'dossier' (default, fast) · 'extras' (work history/education/repos) · 'all'. | |
| team_id | No | For scope:'team' — the organizationId (from account_status.teams). Optional when you're in exactly one team; required otherwise. | |
| person_id | Yes | The person's id (from search_people), or the literal 'me' for yourself. | |
| compared_to | No | Optional second person_id — adds a shared_signals section. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is clear. The description adds valuable behavioral context: it explains the present-tense snapshot semantics (empty field means not recorded, NOT false), the structure of contact and relationship sections, and the pooling behavior for team scope. It also notes that added_at means when they entered your network. This goes beyond annotations, though it doesn't explicitly mention rate limits or auth, but those are not critical for a read tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is fairly long but information-dense. It front-loads the core purpose and then explains key details. Every sentence adds value, though it could be slightly more concise. The structure is logical: purpose, include options, contact section, relationship section, team scope, and snapshot semantics. It's not overly verbose given the complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 parameters, multiple sections, team pooling), the description is remarkably complete. It covers the return structure (contact, relationship), the meaning of fields, the 'me' special value, the team scope, and the snapshot semantics. The output schema exists, so return values are further specified. Nothing critical is missing for an agent to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 all parameters. The description adds extra meaning: it explains the default behavior of include (dossier) and the meaning of 'extras'/'all', clarifies that person_id can be 'me', and details the team scope semantics. It also warns about reading contact.emails instead of top-level email. This adds value beyond the schema, though the schema already covers the basics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns one person's full record including profile, current role, and relationship context, with optional extras. It distinguishes itself from siblings like search_people (which finds people) and my_profile (which is about yourself) by specifying the scope and the 'me' option. The verb 'get' and resource 'person' are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly explains when to use this tool: to retrieve a person's record, with options for include and scope. It contrasts with search_people by noting that person_id comes from search_people hits, and it explains the 'me' usage for self. It also clarifies the difference between own and team scope, and when team_id is needed. This is comprehensive guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sharingARead-onlyIdempotentInspect
Inspect general-access and publication state for a List or View. This intentionally omits collaborator grants, invitations, and comments.
| Name | Required | Description | Default |
|---|---|---|---|
| list_id | No | The list id. Pass this OR list_name. | |
| view_id | No | The View id. Pass this OR view_name. | |
| list_name | No | The list name, matched case-insensitively. Pass this OR list_id. | |
| view_name | No | The View name, matched case-insensitively. Pass this OR view_id. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint, idempotentHint, and destructiveHint, and the description agrees with them. The description adds transparency by explicitly noting that collaborator grants, invitations, and comments are not returned, preventing agents from misinterpreting an incomplete response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences; the first names the object and purpose, the second clarifies scope exclusions. Every sentence adds value, and there is no redundant restating of the title or schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only inspection tool, the combination of the description, output schema, and annotations is complete. The description clearly scopes what is inspected and what is excluded, which is enough for an agent to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema documents all four parameters with 100% coverage, including the 'Pass this OR...' pattern. The description does not need to restate the parameters, but it also does not add extra clarity about choosing between list parameters and view parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with 'Inspect,' a clear verb, and specifies the exact resource: general-access and publication state for a List or View. It further distinguishes itself from broader sharing queries by explicitly omitting collaborator grants, invitations, and comments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly establishes when this tool applies: when inspecting general-access/publication state rather than collaborator-level sharing. It also adds a useful exclusion by stating what it intentionally omits. It does not explicitly name an alternative sibling, 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_viewARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Result page, default 1. | |
| view_id | No | The View id. Pass this OR view_name. | |
| page_size | No | Rows per page, default 25. | |
| view_name | No | The View name, matched case-insensitively. Pass this OR view_id. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
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.
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.
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.
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.
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.
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_rulesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
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.
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.
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.
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.
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.
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_actionsARead-onlyIdempotentInspect
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 a Team, attributed to their owner; pass team_id when you belong to more than one. Pass goal_id to keep only Actions for confirmed people in that Goal; a Team sweep requires a Goal owned by the selected Team. 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. Read-only — for one person's actions use get_person → relationship.actions.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max actions to return (bounded). Omit for all. | |
| scope | No | 'own' (default) — your open actions. 'team' — consent-gated open actions across a Team. | |
| goal_id | No | Only 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_id | No | For scope:'team' — the organizationId from account_status.teams. Optional when you belong to exactly one team; required otherwise. | |
| undated | No | Only actions with no remind_at (open-ended follow-ups). Omit for all open actions. | |
| person_id | No | Scope to one person's open actions (their id from search_people / get_person). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so safety is covered. The description goes beyond annotations by disclosing ordering behavior (soonest remind_at first, undated last), consent-gating for team scope, attribution to owner, and the read-only nature in words. This adds meaningful behavioral context without contradicting 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every clause earns its place: the core sweep behavior is front-loaded, followed by scoping and filtering variants. It is slightly long for a single paragraph, but each sentence contributes a distinct piece of usage or behavioral guidance, so the length is justified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with six optional parameters and an output schema already provided, the description covers the key contexts: whole-network sweeping, team consent gating, goal-based filtering, undated filtering, per-person scoping, and limit capping. Edge cases like team_id being required when multiple teams exist and Goal ownership for team sweeps are addressed, making it complete without needing to describe the return value schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 beyond the schema: it explains that scope:'team' returns consent-gated open actions attributed to their owner, that team_id is needed only when you belong to more than one team, that a team sweep requires a Goal owned by the selected Team, and that undated:true isolates open-ended follow-ups. These enrich the parameter meanings beyond the bare field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: lists OPEN follow-up/actions across the whole network in one call, with each action attached to its person. It distinguishes itself from the per-person get_person approach and, among siblings, is clearly the aggregation read call rather than create_action, update_action, complete_action, or delete_action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: "Use this to sweep all your to-dos... instead of calling get_person per person." It also provides the exclusion condition: "for one person's actions use get_person → relationship.actions." It further clarifies team scope prerequisites, goal ownership constraints, and filtering options, leaving no ambiguity about when to select this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_identity_matchesARead-onlyIdempotentInspect
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?".
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rows (default 20, max 100). | |
| person | No | Optional person_id — only show matches involving this person. | |
| status | No | Only show matches with this status. pending = awaiting review; auto_merged = merged / auto-merge tier; accepted = a confirmed candidate; rejected = marked different / vetoed. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
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.
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.
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.
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.
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.
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_introsARead-onlyIdempotentInspect
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?".
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rows (default 50). | |
| status | No | Filter by lifecycle status. | |
| connector_person_id | No | Only intros offered by this person. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering safety. The description adds the lifecycle statuses and the nature of the list (offered, connected-to), which goes beyond the schema's minimal descriptions. No contradiction 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, efficient sentence that front-loads the primary function and includes the useful state enumeration. No fluff, every word contributes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and annotations cover safety, the description fully covers the essential semantic context: what the list contains, the statuses, and the user questions it resolves. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear per-parameter descriptions. The tool description repeats the status values already in the enum but adds no semantic depth beyond what the schema supplies. Baseline of 3 is appropriate given high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as listing pending introductions, specifying the key data elements (who offered, target person, status) and explicitly states the user questions it answers. This is specific and distinct from the sibling tools like track_intro.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It frames usage around answering 'what intros am I waiting on?' and 'who promised to connect me to someone?', giving clear context for when to invoke it. It doesn't explicitly mention alternatives or exclusions, but the context is strong enough to guide an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_listsARead-onlyIdempotentInspect
The user's lists (personal + team), 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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this read-only, idempotent, and non-destructive. The description adds meaningful context beyond annotations by specifying scope (personal + team), the fields returned (description, member counts, pending suggestions), and the tool's role as the entry point for resolving a list_id. No behavioral contradictions exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler. The first sentence defines the resource and return details; the second provides the key usage hint. All content earns its place and is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters, an output schema, and annotations covering safety, the description is sufficient for an agent to know when to call the tool and what it returns. The usage note about list_id fills the main practical gap an agent would face.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and 100% schema description coverage, so there is nothing for the description to explain about parameters. The baseline for a parameterless tool is appropriate, and the description adds no irrelevant parameter detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that this tool returns the user's lists (personal and team) along with key metadata, and it explicitly positions itself as the source for list_id lookup. The plural scope and emphasis on list details distinguish it from siblings like get_list, create_list, and list_actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear, direct usage trigger: 'Start here when the user names a list.' This gives the agent a concrete condition for using the tool. However, it does not explicitly name alternative tools or state when not to use it, so it stops short of full exclusionary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_profile_gapsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max contacts (default 25, max 100). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
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.
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.
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.
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.
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.
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_tasksARead-onlyIdempotentInspect
List the user's noticed agent tasks, including timing, enabled state, next and last run, and run count.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
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.
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.
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.
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.
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.
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_viewsARead-onlyIdempotentInspect
List visible personal and Team Views, including each saved definition and effective access role. Start here when the user names a View.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Event/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. | |
| type | Yes | What the interaction was: 'in_person' (you were physically together), 'call' (a live conversation — phone or video), or 'message' (an asynchronous written exchange). | |
| format | No | Group 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. | |
| channel | No | Where it happened. For a call: 'phone' (default) or 'video'. For a message: 'email' | 'linkedin' | 'x' | 'whatsapp' | 'sms'. Not used for in_person. | |
| payload | No | Optional freeform details (e.g. { topic: 'fundraising' }). | |
| direction | No | Messages 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_id | Yes | The person this interaction is with. | |
| occurred_at | No | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses that each call appends a new event (non-idempotent), that the tool builds the relationship timeline and affects recency/strength, and that people may be added to the network as a side effect. These behaviors are not visible in the annotations and are clearly surfaced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is six tight sentences with no filler: purpose, defaults, side effects, and exclusions each get exactly one clear sentence. The most important action ('Record a touchpoint') is front-loaded, and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a rich schema and an output schema, the description covers what an agent needs to select and invoke it correctly: required type values, optional defaults, side effects, network behavior, and the key sibling alternative. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% parameter documentation, including enums and defaults, so the description does not need to repeat them. The description adds high-level guidance like 'Everything else is optional detail that defaults sensibly', but it does not materially enrich individual parameter semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 ('Record a touchpoint') and enumerates exactly what the `type` field accepts. It also distinguishes itself from the closest sibling by saying 'NOT for notes — ... use add_memory instead', so an agent can select it without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 ('Works on any search_people hit') and when not to use it ('NOT for notes'), naming the alternative tool. It also sets expectations about auto-adding people to the network, which is important contextual guidance for invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_different_peopleADestructiveIdempotentInspect
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. 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.
| Name | Required | Description | Default |
|---|---|---|---|
| person_a | No | persons.id — alternative to candidate_id; pass with person_b. | |
| person_b | No | persons.id — pass with person_a. | |
| profile_a | No | Source-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_b | No | Source-prefixed profile id (e.g. github:123) — the profile_b from list_identity_matches. Pass with profile_a. | |
| candidate_id | No | merge_candidates id of a pending match (the candidate_id from list_identity_matches). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint false, destructiveHint true), the description adds behavioral details: 'durable disconnect', 'so notices won't suggest (or auto-) merge them again', and 'Reversible by an admin'. This explains the lasting impact and reversibility, exceeding annotation information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-organized, using clear separations (semicolons, dashes) to convey purpose, usage, and alternatives. Every sentence adds value, and it avoids unnecessary fluff while remaining readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
It covers the action's purpose, how to invoke it, its effects on future suggestions, and its reversibility. Although an output schema exists, the description doesn't need to detail return values; it provides complete operational context for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover all 5 parameters (100% coverage). The description enriches them by explaining the logical alternatives (candidate_id vs person pair vs profile pair) and the specific scenarios for each, such as handling review-queue rows, adding meaning beyond the basic field comments.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Mark two records as DIFFERENT people' and explains the durable disconnect effect. It distinguishes from the sibling tool dismiss_identity_match, which is a soft 'not now', making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit ways to identify the records: by candidate_id, person pair, or profile pair, with specific context for each (e.g., 'use this to clear email→person false positives'). It also references the alternative tool for a softer action, giving clear when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_getARead-onlyIdempotentInspect
Fetch a specific memory entry by id (from memory_search).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The memory entry id. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
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.
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.
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.
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.
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.
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_saveAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| person | No | Name 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. | |
| content | Yes | The memory to save. | |
| category | No | Defaults to 'fact'. | |
| confidence | No | 0-1 confidence (default 0.9). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal idempotent, non-read-only, and non-destructive behavior. The description adds meaningful context beyond annotations: deduplication against existing memories, storage in a global store, and optional attachment to a specific contact's PRM record. This helps the agent anticipate side effects without contradicting 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three focused sentences with no wasted words. The core action is front-loaded, followed by the deduplication behavior and the optional person attachment. Every sentence adds a distinct piece of information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a well-schemaed tool with output schema and annotations, the description covers the key behavioral nuances: durability, deduplication, and person scoping. The only notable gap is the lack of explicit differentiation from the sibling 'add_memory' tool, which slightly reduces completeness for an agent choosing among similar tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 all four parameters. The description adds a little emphasis on the 'person' parameter's attach-to-contact behavior, but that information is also present in the schema. This is the baseline score for full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: save a durable fact/preference/decision/commitment to long-term memory, with deduplication and optional person attachment. It is specific about the resource and operation, but it does not explicitly distinguish this from the sibling tool 'add_memory', which appears to serve a similar purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool (when storing durable long-term memories that should be deduplicated and possibly linked to a contact), but it gives no explicit guidance about when to choose this tool over alternatives like 'add_memory'. There are no exclusions or alternative routing instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_searchARead-onlyIdempotentInspect
Search your long-term memory (facts, decisions, preferences, commitments). Use before answering questions about past context.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | What to search for. | |
| minScore | No | Minimum similarity 0-1 (default 0.3). | |
| maxResults | No | Max results. | |
| memoryType | No | Filter by memory type (default all). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, fully covering the safety profile in structured data. The description adds the content scope of searchable memory (facts, decisions, preferences, commitments) but discloses no further behavioral traits such as result freshness, memory coverage limits, or exclusivity of long-term memory. It adds modest value beyond the annotations, earning a 3.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero filler: the action and memory scope are front-loaded, followed by a single-line usage directive. Every clause carries information not already present in the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, idempotent search tool with 100% schema coverage, a rich annotation set, and an output schema present, the description need not explain return values. The main remaining gap is the absence of explicit routing between memory_search and memory_get, but the 'use before answering questions about past context' directive provides sufficient operational placement.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (query, minScore, maxResults, memoryType) are already documented in the schema, making 3 the baseline. The parenthetical memory-content list gives loose semantic context for what query matches against, but adds no syntax, defaults, or format details beyond the schema. No compensation is required and none is meaningfully added.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource pair, 'Search your long-term memory,' and enumerates the memory scope: facts, decisions, preferences, commitments. This clearly marks it as a query operation, implicitly distinct from write siblings like memory_save and add_memory. However, it does not explicitly differentiate from memory_get, a similarly named retrieval sibling, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use before answering questions about past context' is explicit, actionable trigger guidance that tells an agent when this tool should be invoked. It provides clear context but names no alternatives or when-not-to-use exclusions, such as a pointer to memory_get for direct key-based retrieval. This matches the 'clear context, no exclusions' level.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_profile_to_personADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| identifier | Yes | The 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_id | No | persons.id to move it ONTO (an existing record). Pass this OR to_new_contact. | |
| from_person_id | Yes | persons.id the identifier is CURRENTLY (wrongly) attached to. | |
| to_new_contact | No | Create 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
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
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.
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.
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.
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.
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.
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_profileARead-onlyIdempotentInspect
Your own developer profile as noticed sees it — GitHub + LinkedIn + derived tags. Grounds 'about me' answers.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the tool as read-only, idempotent, and non-destructive. The description adds meaningful context about what the profile contains and how it is framed, which goes beyond safety traits, though it could clarify the odd 'as noticed sees it' phrasing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler: it states the resource, its content, and its intended use. Information is front-loaded in the phrase 'Your own developer profile'.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only tool with an output schema, the description is largely complete: it names the resource, content, and intended use case. The phrase 'as noticed sees it' is ambiguous and could be clearer, but it does not prevent an agent from invoking the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description does not need to explain parameters. With no input schema properties, the baseline for this dimension applies and no parameter meaning is missing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly indicates this tool returns the calling developer's own profile, with GitHub, LinkedIn, and derived tags as content. It helps distinguish my_profile from profile-related siblings by emphasizing 'your own', though it omits an explicit verb like 'retrieve' or 'get'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase "Grounds 'about me' answers" explicitly identifies a use case: answering questions about the caller. It gives clear context but does not mention exclusions or alternatives among sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
network_summaryARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | 'own' (default) — your network. 'team' — the pooled team network (total + per-member sizes). | |
| team_id | No | For scope:'team' — the organizationId (from account_status.teams). Optional when you're in exactly one team; required otherwise. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, establishing safety. The description adds behavioral context beyond annotations by explaining the team-pooled semantics and that it returns 'the distinct total known by ANY teammate plus each member's own network size + consent tier.' This is additive and does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is information-dense and front-loads the core purpose, followed by scope details and usage guidance. While slightly run-on, every sentence adds value and no word is wasted, though it could be slightly more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and the tool is read-only and idempotent, the description covers all necessary context: what it does, when to use it, how parameters work, and when to choose an alternative. It fully supports an agent in calling it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description enriches parameter semantics by detailing what scope:'team' returns ('POOLED TEAM network', 'distinct total known by ANY teammate plus each member's own network size + consent tier') and clarifies default values and team_id requirements in the schema itself.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides a 'lightweight overview of your network' with concrete outputs like 'total people, breakdowns by source/company, recent vs stale.' It also differentiates itself from search_people by specifying the exact condition for using the alternative ('for how many <role/type> use search_people').
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the alternative (search_people) and the condition that selects it ('for overall how many…' vs 'how many <role/type>'). Also explains when to use the team scope and what it returns, leaving no ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reject_list_suggestionADestructiveInspect
Reject one pending add/remove suggestion for a list. The decision is retained so noticed does not propose it again.
| Name | Required | Description | Default |
|---|---|---|---|
| list_id | No | The list id. Pass this OR list_name. | |
| list_name | No | The list name, matched case-insensitively. Pass this OR list_id. | |
| person_id | Yes | The person id on the pending suggestion. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
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.
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.
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.
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.
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.
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_listADestructiveIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| list_id | No | The list's id (from list_lists / create_list). Pass this OR list_name. | |
| list_name | No | The list's name, matched case-insensitively. Pass this OR list_id. | |
| person_id | Yes | The person's id to take off the list. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
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.
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.
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.
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.
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.
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_networkAIdempotentInspect
Remove a person from your active network. Soft archive — history is kept and they can be re-added.
| Name | Required | Description | Default |
|---|---|---|---|
| person_id | Yes | The person's id to remove from your network. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
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.
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.
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.
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.
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.
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.
resolve_personARead-onlyIdempotentInspect
Deterministically resolve a (possibly misheard) name — optionally with a company hint — to ONE person in the network. Returns 'matched' (with confidence), 'ambiguous' (ranked alternatives to ask the user about), or 'none'. 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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The person's name as heard/known — misspellings are expected and handled. | |
| company | No | Company hint if known (also fuzzy) — sharply improves disambiguation. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description enriches the annotations by clarifying the deterministic behavior ('same input always gives the same answer'), which aligns with and expands on the idempotentHint=true annotation. It also details the three possible return states ('matched', 'ambiguous', 'none') and explains the handling of misheard names and fuzzy company hints, all of which go well beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description packs a lot of value into two sentences, with the core purpose front-loaded and usage guidance inserted as an aside. The dash-heavy relative clause ('— same input always gives the same answer—') is slightly redundant with 'deterministically' but reinforces the key point. It could be marginally tighter, but it remains efficient and well-ordered.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists (likely documenting the return format) and the annotations already establish the safety profile (readOnly, idempotent, non-destructive), the description fully covers the operational semantics. It tells the agent what the tool does, when to use it, how it behaves with ambiguous input, and what to expect in return, leaving no critical gap for a typical invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, the base is 3, but the description adds value by explaining that 'name' may be misheard and 'company' serves as a disambiguation hint that 'sharply improves disambiguation.' This contextualizes the purpose of both parameters beyond the schema's mechanical descriptions, justifying a score above the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise, verb-driven statement: 'Deterministically resolve a (possibly misheard) name — optionally with a company hint — to ONE person in the network.' This clearly defines the action, resource, and scope while setting it apart from siblings like search_people or get_person. The phrase 'PREFER THIS over hand-rolled search_people ladders' explicitly differentiates it from a key sibling, leaving no ambiguity about its purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes an explicit usage directive: 'PREFER THIS over hand-rolled search_people ladders whenever the task is "who is X?" from a voice note, capture, or mention.' This tells the agent exactly when to choose this tool and hints at the alternative (search_people). While it does not list exclusions, the 'whenever' clause is specific enough to guide correct selection.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| roles | No | The user's role chips, stored as given — e.g. ['Founder', 'Product & Engineering']. | |
| building | No | One line on what the user is building / working on right now. | |
| location | No | Where the user is based — e.g. NYC, Lisbon, Remote. | |
| user_name | No | The user's name, as they want to be addressed. | |
| extra_notes | No | Anything else worth knowing — goals, who they want to meet, open context. | |
| focus_areas | No | What's on the user's plate right now — e.g. ['Sales', 'Hiring', 'Fundraising']. | |
| current_tools | No | How the user manages relationships today — e.g. ['Notes app', 'LinkedIn', 'Nothing']. | |
| value_ranking | No | What the user wants most from noticed, ranked most → least important. | |
| communication_preferences | No | How the user wants the agent to communicate — e.g. ['brief responses', 'no emojis']. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
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.
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.
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.
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.
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.
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_peopleARead-onlyIdempotentInspect
Search people by free text — name, company, keywords. 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 over-matches bios/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). Optional company, location, skills, tags filters. 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); concept queries with zero literal hits 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.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | 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. | |
| role | No | 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. | |
| tags | No | Require all of these tags you've applied. | |
| limit | No | Page size (default 25, max 200 for own / 50 for public). | |
| scope | No | '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). | |
| stale | No | Only people you've never interacted with, or not in 90+ days. | |
| offset | No | Pagination offset. | |
| recent | No | Only people you've interacted with in the last 14 days. | |
| skills | No | Require all of these skills. | |
| company | No | Filter by company (matches current + former employers). | |
| sources | No | Restrict to people who came from any of these sources. | |
| team_id | No | 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. | |
| location | No | Filter by location (substring match). | |
| added_after | No | Only 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_before | No | Only people added STRICTLY BEFORE this date (ISO). | |
| last_interaction_after | No | Only 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_before | No | Only 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
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only and idempotent, but the description goes far beyond them: OR-matching and ranking, AND and + operators, fuzzy matching fallback, semantic embedding fallback, strong_total semantics, matched_on per-row output, and unsupported_filters for public scope. This is rich behavioral disclosure that meaningfully informs invocation and result interpretation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and long, but nearly every sentence earns its place given the parameter count and matching complexity. It is front-loaded with the core purpose and operator rules, though the wall-of-text format with many parenthetical asides could be more scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 17 parameters, an output schema, and safety annotations, this description still adds the missing decision context: fuzzy vs semantic fallback, what strong_total means, how filters behave in public scope, team_id requirements, and the meaning of zero structured-filter results. The tool is complex, and the description is complete enough for correct selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 substantially enriches parameter meaning: q gets operator semantics, role gets coverage details and seniority guidance, scope gets whole-network vs warm-intro vs pooled-team distinctions, and date filters get interaction-vs-addition semantics. This is far beyond what the schema alone provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Search people by free text — name, company, keywords', naming a specific verb and resource. It clearly distinguishes itself from sibling tools like get_person and list_identity_matches by framing this as a search operation with rich matching semantics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance: use the role filter instead of free text for roles/functions, use structured filters to count people of a type, and fall back to free text when a structured-filter zero means thin data rather than absence. It also explains scope differences and operator behavior, giving an agent clear decision rules.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_general_accessADestructiveIdempotentInspect
After user confirmation, set a List or View to restricted, Team-visible, or anyone-with-link access. Link access is view-only. Does not create invitations or collaborator grants.
| Name | Required | Description | Default |
|---|---|---|---|
| role | Yes | ||
| access | Yes | ||
| list_id | No | The list id. Pass this OR list_name. | |
| view_id | No | The View id. Pass this OR view_name. | |
| list_name | No | The list name, matched case-insensitively. Pass this OR list_id. | |
| view_name | No | The View name, matched case-insensitively. Pass this OR view_id. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already indicate that the tool is destructive and not read-only, but the description adds valuable behavioral context: it requires user confirmation, states that link access is view-only, and explicitly notes that it does not create invitations or collaborator grants. This goes well beyond the annotation hints and clarifies potential side effects and prerequisites.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, using three short sentences that front-load the primary purpose and then add key clarifications. There is no redundant or extraneous content, and the structure guides the reader from action to constraints and exclusions efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the description need not explain return values. It covers the core action, prerequisites, and exclusions thoroughly. The main gap is the lack of explanation for the 'role' parameter, which is a minor omission in an otherwise complete description. Overall, the tool is well-contextualized for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides descriptions for four of six parameters, giving a coverage of 67%. The description adds meaning for the 'access' parameter by enumerating the allowed values (restricted, team-visible, anyone-with-link), but it does not explain the 'role' parameter or how it interacts with access. Since coverage is moderate and not low, the description partially compensates but leaves the role parameter unclear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool sets a List or View to one of three access levels (restricted, team-visible, or anyone-with-link), plus clarifies that link access is view-only. It also explicitly states what the tool does not do (create invitations or collaborator grants), distinguishing it from related sharing functions. The verb 'set' and specific resource (List or View) make the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a usage condition ('After user confirmation') and clarifies that the tool does not create invitations or collaborator grants, which helps a user decide when to invoke it over other sharing-related tools. However, it does not explicitly compare against alternatives like set_published or update_list, so the guidance is slightly indirect. Overall, the context is sufficient for selection in most cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_publishedADestructiveIdempotentInspect
Publish or unpublish a List or View at its stable public link. Unpublishing removes public access, so confirm that intent; repeating the same value is idempotent.
| Name | Required | Description | Default |
|---|---|---|---|
| list_id | No | The list id. Pass this OR list_name. | |
| view_id | No | The View id. Pass this OR view_name. | |
| list_name | No | The list name, matched case-insensitively. Pass this OR list_id. | |
| published | Yes | True to publish; false to unpublish. | |
| view_name | No | The View name, matched case-insensitively. Pass this OR view_id. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond annotations by specifying that unpublishing removes public access and that repeating the same value is idempotent. This is more specific than the generic destructiveHint and idempotentHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (two sentences), front-loads the core action, and includes important caveats without unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists, return values need not be explained. The description covers the action, side effects, idempotency, and a warning, which is sufficient for a toggle operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All parameters have descriptions (100% coverage), but they are minimal and do not explicitly clarify that list and view identifiers are mutually exclusive. The tool description says 'a List or View' implying exclusivity, but the schema leaves ambiguity if both are provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Publish or unpublish') and the resource ('List or View'), with a specific aspect ('at its stable public link'). It distinguishes from siblings like update_list or update_view which modify other properties.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool (when toggling publish status) and provides a caution about unpublishing removing public access, suggesting confirmation. While alternatives are not explicitly named, the scope is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suggest_identity_matchADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | No | Optional short note on why they're the same person. | |
| person_a | Yes | person_id of the FIRST person — kept as the surviving record after the merge (your own person always survives). | |
| person_b | Yes | person_id of the SECOND person — merged into person_a. | |
| confirmation_token | No | Returned 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
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| source | Yes | Connected integration source to refresh. | |
| confirmed | Yes | Set to true only after the user explicitly confirms this sync. | |
| account_id | No | Account id from source status; required for multi-account sources. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
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.
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.
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.
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.
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.
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_introADestructiveInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | Context — where the offer happened, why it matters. | |
| status | No | waiting (default: still missing info) · ready (ready to ask) · requested (intro asked) · done (it happened) · dropped. | |
| intro_id | No | Existing intro id (from list_intros) to update. Omit to create. | |
| offered_on | No | Date the intro was offered (YYYY-MM-DD). | |
| target_org | No | Their company/org, if known. | |
| target_name | No | The person being offered, as known so far — partial is fine. | |
| missing_fields | No | What's still needed before asking (e.g. ['name','linkedin']). | |
| resolved_person_id | No | The real contact's person id once the intro happened — implies status done. | |
| connector_person_id | No | Who offered the intro (their person id from search_people). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses non-obvious behavior: create vs. update based on intro_id, resolved_person_id implying done, and the workflow requirement to add the person to the network before graduation. This goes beyond the annotations. It does not detail what resolves on the destructive path (e.g., 'dropped' status), but the schema and destructiveHint annotation cover at least the existence of that behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two dense sentences with no wasted words. It front-loads the core purpose ('Track a promised introduction'), states create/update behavior, and then gives a clear graduation workflow. Every clause contributes to the mental model an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter mutation tool with zero required parameters, the description covers the key decisions: whether to create or update, whether partial data is acceptable, and how to graduate an intro. The output schema is present, so return values are not a known gap. A slight miss is the lack of explicit behavior around the 'dropped' status and what 'destructive' means, but the description handles most situations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents all 10 parameters, so baseline is 3. The description adds value on top: it explains the create/update behavior of intro_id, the 'graduate' behavior of resolved_person_id, and the intended meaning of partial target_name/missing_fields. It does not explain every parameter in prose, but the schema covers them well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a clear resource ('a promised introduction') and a clear action ('track'), then nails the exact semantics: create when intro_id is absent, update when intro_id is present, and graduate when resolved_person_id is passed. This is specific enough to distinguish the tool from the sibling list_intros and from generic note-taking, even 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: use this when someone offers to connect the user with someone they haven't met, and it gives concrete workflow guidance — 'When the intro lands: add the person to the network, then pass resolved_person_id here to graduate it.' It even states partial information is acceptable. However, it does not explicitly discuss alternatives or when not to use it beyond the implicit 'don't let it evaporate in notes'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_actionADestructiveIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| done | No | true → mark done; false → reopen. Omit to leave unchanged. | |
| content | No | Updated text for the action. Omit to leave unchanged. | |
| action_id | Yes | The action to update (from get_person → relationship.actions). | |
| remind_at | No | Updated 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
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
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.
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.
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.
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.
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.
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_listCDestructiveIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New list name. | |
| list_id | No | The list id. Pass this OR list_name. | |
| list_name | No | The list name, matched case-insensitively. Pass this OR list_id. | |
| ai_enabled | No | Whether noticed should suggest additions and removals. | |
| description | No | New suggestion goal for the list. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
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.
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.
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.
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.
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.
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_personADestructiveIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | Their role/title — your override, wins over the role derived from their headline. Pass null to clear. | |
| tags | No | Merged 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. | |
| No | Their PRIMARY email — alias for emails[0]; keeps any other addresses already recorded. Pass null to clear. Use `emails` to set several. | ||
| emails | No | ALL 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. | |
| phones | No | ALL of their phone numbers, primary FIRST. REPLACES the current list; [] clears the override. | |
| company | No | Their PRIMARY company — alias for companies[0]; keeps any other companies already recorded. Pass null to clear. Use `companies` to set several. | |
| companies | No | ALL companies they're at, primary FIRST. REPLACES the current list; [] clears the override. | |
| person_id | Yes | The person's id (from search_people / get_person). | |
| custom_name | No | Your display name for them. | |
| default_notes | No | Freeform notes. | |
| relationship_types | No | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations' idempotent/destructive hints, the description reveals critical behavioral details: overrides win over imported/derived values, array fields replace rather than merge (unlike tags), [] clears, singular fields are aliases for the primary array entry, and the upsert side effect when the person isn't in the network. These are all disclosed without contradicting 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence carries operational weight. It is front-loaded with the core fields, then builds logically through override semantics, array replacement, aliases, and upsert. There is no filler; even the web-panel chip reference reinforces the override concept.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of 11 parameters with replace/merge semantics and an output schema, the description is complete. It covers the non-obvious behaviors: upsert for non-network persons, primary selection from arrays, clearing via [], tag merging, and alias behavior. No critical omission remains for an agent to invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents all 11 parameters (100% coverage), so the baseline is 3. The description adds substantial meaning: alias relationships (email/company as primary), replace-vs-merge distinctions, primary-first ordering, null-clearing behavior, and the closed-set validation for relationship_types. This far exceeds what the schema alone provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 ('Update your notes, tags, custom_name, relationship_type, or the person's companies / role / emails / phones') and clearly frames the tool as managing user overrides. This differentiates it from update_action, update_list, and update_view by resource, and from person-creation/add tools via the override semantics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: 'this is how you correct or fill in a relationship's contact details' and even explains the upsert behavior so it works on search_people hits. It also provides internal guidance (use arrays for multiple values, never stash a second email in notes). However, it does not explicitly contrast with sibling tools such as add_note or add_profile_to_person, so it lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_scheduled_taskBIdempotentInspect
Update, pause, or resume one noticed agent task. Pass schedule_kind and schedule_value together when changing its timing.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| name | No | ||
| prompt | No | ||
| enabled | No | ||
| timezone | No | ||
| schedule_kind | No | ||
| schedule_value | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
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.
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.
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.
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.
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.
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_viewADestructiveIdempotentInspect
Rename a View or replace its saved definition. Identify it by view_id or an unambiguous view_name.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New View name. | |
| view_id | No | The View id. Pass this OR view_name. | |
| view_name | No | The View name, matched case-insensitively. Pass this OR view_id. | |
| definition | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | Whether noticed completed the operation. |
| data | No | The operation result when ok is true. |
| error | No | A human-readable error when ok is false. |
TDQS
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.
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.
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.
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.
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.
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. Dates show when Glama detected each change.
4 tool updates
- Added
create_scheduled_task - Added
delete_scheduled_task - Added
list_scheduled_tasks - Added
update_scheduled_task
3 tool updates
- Added
get_connected_source_status - Added
get_connection_link - Added
sync_connected_source
1 tool update
- Changed
account_status1 field changed- added
Output schema / properties / data / properties / extensionAdded value: +{ + "additionalProperties": false, + "properties": { + "paired": { + "type": "boolean" + }, + "ready": { + "type": "boolean" + }, + "sources": { + "items": { + "additionalProperties": false, + "properties": { + "error": { + "type": [ + "string", + "null" + ] + }, + "itemCount": { + "type": [ + "number", + "null" + ] + }, + "label": { + "enum": [ + "LinkedIn", + "X" + ], + "type": "string" + }, + "requiredDataReady": { + "type": "boolean" + }, + "source": { + "enum": [ + "linkedin_extension", + "x_extension" + ], + "type": "string" + }, + "status": { + "enum": [ + "pairing", + "syncing", + "synced", + "not_signed_in", + "needs_attention", + "partial" + ], + "type": "string" + } + }, + "required": [ + "source", + "label", + "status", + "requiredDataReady", + "itemCount", + "error" + ], + "type": "object" + }, + "type": "array" + }, + "status": { + "enum": [ + "not_started", + "pairing", + "syncing", + "ready", + "needs_attention" + ], + "type": "string" + } + }, + "required": [ + "paired", + "ready", + "status", + "sources" + ], + "type": "object" +}
50 tool updates
- Changed
accept_identity_match1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": true, + "description": "The operation result when ok is true.", + "properties": {}, + "type": "object" + }, + "error": { + "description": "A human-readable error when ok is false.", + "type": "string" + }, + "ok": { + "description": "Whether noticed completed the operation.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
- Changed
accept_list_suggestion1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": false, + "description": "The operation result when ok is true.", + "properties": { + "list_id": { + "type": "string" + }, + "person_id": { + "type": "string" + }, + "remaining_pending": { + "type": "number" + } + }, + "required": [ + "list_id", + "person_id", + "remaining_pending" + ], + "type": "object" + }, + "error": { + "description": "A human-readable error when ok is false.", + "type": "string" + }, + "ok": { + "description": "Whether noticed completed the operation.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
- Changed
account_status1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": true, + "description": "The operation result when ok is true.", + "properties": { + "actions": { + "additionalProperties": true, + "properties": {}, + "type": "object" + }, + "chat": { + "$ref": "#/properties/data/properties/github" + }, + "github": { + "additionalProperties": true, + "properties": { + "connected": { + "type": "boolean" + }, + "displayValue": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "connected" + ], + "type": "object" + }, + "gmail": { + "additionalProperties": false, + "properties": { + "connected": { + "type": "boolean" + }, + "imported": { + "type": "boolean" + } + }, + "required": [ + "connected", + "imported" + ], + "type": "object" + }, + "linkedin": { + "$ref": "#/properties/data/properties/github" + }, + "linkedinExport": { + "additionalProperties": true, + "properties": { + "imported": { + "type": "boolean" + }, + "lastImportedAt": { + "$ref": "#/properties/data/properties/github/properties/displayValue" + } + }, + "required": [ + "imported", + "lastImportedAt" + ], + "type": "object" + }, + "nextAction": { + "type": "string" + }, + "teams": { + "items": { + "$ref": "#/properties/data/properties/actions" + }, + "type": "array" + } + }, + "type": "object" + }, + "error": { + "description": "A human-readable error when ok is false.", + "type": "string" + }, + "ok": { + "description": "Whether noticed completed the operation.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
- Changed
add_memory1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": true, + "description": "The operation result when ok is true.", + "properties": {}, + "type": "object" + }, + "error": { + "description": "A human-readable error when ok is false.", + "type": "string" + }, + "ok": { + "description": "Whether noticed completed the operation.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
- Changed
add_note1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": true, + "description": "The operation result when ok is true.", + "properties": {}, + "type": "object" + }, + "error": { + "description": "A human-readable error when ok is false.", + "type": "string" + }, + "ok": { + "description": "Whether noticed completed the operation.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
- Changed
add_profile_to_person1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": true, + "description": "The operation result when ok is true.", + "properties": { + "merged_person_id": { + "type": "string" + }, + "message": { + "type": "string" + }, + "status": { + "type": "string" + } + }, + "required": [ + "status", + "merged_person_id", + "message" + ], + "type": "object" + }, + "error": { + "description": "A human-readable error when ok is false.", + "type": "string" + }, + "ok": { + "description": "Whether noticed completed the operation.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
- Changed
add_to_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": false, + "description": "The operation result when ok is true.", + "properties": { + "added": { + "type": "boolean" + }, + "list_id": { + "type": "string" + }, + "person_id": { + "type": "string" + } + }, + "required": [ + "list_id", + "person_id", + "added" + ], + "type": "object" + }, + "error": { + "description": "A human-readable error when ok is false.", + "type": "string" + }, + "ok": { + "description": "Whether noticed completed the operation.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
- Changed
add_to_network1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": true, + "description": "The operation result when ok is true.", + "properties": { + "confirmation_token": { + "type": "string" + }, + "created": { + "type": "boolean" + }, + "person_id": { + "type": "string" + }, + "potential_duplicates": { + "items": { + "additionalProperties": true, + "properties": { + "company": { + "$ref": "#/properties/data/properties/potential_duplicates/items/properties/person_id" + }, + "display_name": { + "type": "string" + }, + "headline": { + "$ref": "#/properties/data/properties/potential_duplicates/items/properties/person_id" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "person_id": { + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "error": { + "description": "A human-readable error when ok is false.", + "type": "string" + }, + "ok": { + "description": "Whether noticed completed the operation.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
- Changed
complete_action1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": true, + "description": "The operation result when ok is true.", + "properties": { + "completed": { + "type": "boolean" + } + }, + "required": [ + "completed" + ], + "type": "object" + }, + "error": { + "description": "A human-readable error when ok is false.", + "type": "string" + }, + "ok": { + "description": "Whether noticed completed the operation.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
- Changed
create_action1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": true, + "description": "The operation result when ok is true.", + "properties": { + "action_id": { + "type": "string" + }, + "id": { + "type": "string" + }, + "person_id": { + "type": "string" + }, + "remind_at": { + "type": [ + "string", + "null" + ] + }, + "status": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "error": { + "description": "A human-readable error when ok is false.", + "type": "string" + }, + "ok": { + "description": "Whether noticed completed the operation.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
- Changed
create_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": true, + "description": "The operation result when ok is true.", + "properties": { + "ai_enabled": { + "type": "boolean" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "list_id": { + "type": "string" + }, + "member_count": { + "type": "number" + }, + "name": { + "type": "string" + }, + "organization_id": { + "$ref": "#/properties/data/properties/description" + }, + "pending_count": { + "type": "number" + } + }, + "required": [ + "list_id", + "name" + ], + "type": "object" + }, + "error": { + "description": "A human-readable error when ok is false.", + "type": "string" + }, + "ok": { + "description": "Whether noticed completed the operation.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
- Changed
create_view1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": true, + "description": "The operation result when ok is true.", + "properties": { + "created_at": { + "type": "string" + }, + "definition": { + "additionalProperties": true, + "properties": {}, + "type": "object" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "effective_role": { + "type": "string" + }, + "name": { + "type": "string" + }, + "organization_id": { + "$ref": "#/properties/data/properties/description" + }, + "updated_at": { + "type": "string" + }, + "view_id": { + "type": "string" + } + }, + "required": [ + "view_id", + "name" + ], + "type": "object" + }, + "error": { + "description": "A human-readable error when ok is false.", + "type": "string" + }, + "ok": { + "description": "Whether noticed completed the operation.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
- Changed
delete_action1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": true, + "description": "The operation result when ok is true.", + "properties": { + "deleted": { + "type": "boolean" + } + }, + "required": [ + "deleted" + ], + "type": "object" + }, + "error": { + "description": "A human-readable error when ok is false.", + "type": "string" + }, + "ok": { + "description": "Whether noticed completed the operation.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
- Changed
delete_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": false, + "description": "The operation result when ok is true.", + "properties": { + "deleted": { + "type": "boolean" + }, + "list_id": { + "type": "string" + } + }, + "required": [ + "list_id", + "deleted" + ], + "type": "object" + }, + "error": { + "description": "A human-readable error when ok is false.", + "type": "string" + }, + "ok": { + "description": "Whether noticed completed the operation.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
- Changed
delete_view1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": false, + "description": "The operation result when ok is true.", + "properties": { + "deleted": { + "type": "boolean" + }, + "view_id": { + "type": "string" + } + }, + "required": [ + "view_id", + "deleted" + ], + "type": "object" + }, + "error": { + "description": "A human-readable error when ok is false.", + "type": "string" + }, + "ok": { + "description": "Whether noticed completed the operation.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
- Changed
dismiss_identity_match1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": true, + "description": "The operation result when ok is true.", + "properties": { + "dismissed": { + "type": "boolean" + }, + "message": { + "type": "string" + } + }, + "required": [ + "dismissed", + "message" + ], + "type": "object" + }, + "error": { + "description": "A human-readable error when ok is false.", + "type": "string" + }, + "ok": { + "description": "Whether noticed completed the operation.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
- Changed
get_instructions1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "instructions": { + "type": "string" + } + }, + "required": [ + "instructions" + ], + "type": "object" +}
- Changed
get_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": true, + "description": "The operation result when ok is true.", + "properties": { + "ai_enabled": { + "type": "boolean" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "list_id": { + "type": "string" + }, + "member_count": { + "type": "number" + }, + "members": { + "items": { + "additionalProperties": true, + "properties": {}, + "type": "object" + }, + "type": "array" + }, + "name": { + "type": "string" + }, + "organization_id": { + "$ref": "#/properties/data/properties/description" + }, + "pending_count": { + "type": "number" + }, + "pending_total": { + "type": "number" + }, + "suggestions": { + "$ref": "#/properties/data/properties/members" + } + }, + "required": [ + "list_id", + "name", + "members", + "suggestions", + "pending_total" + ], + "type": "object" + }, + "error": { + "description": "A human-readable error when ok is false.", + "type": "string" + }, + "ok": { + "description": "Whether noticed completed the operation.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
- Changed
get_person1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": true, + "description": "The operation result when ok is true.", + "properties": { + "compared_to": { + "$ref": "#/properties/data/properties/person" + }, + "contact": { + "$ref": "#/properties/data/properties/person" + }, + "person": { + "additionalProperties": true, + "properties": {}, + "type": "object" + }, + "relationship": { + "$ref": "#/properties/data/properties/person" + }, + "scope": { + "enum": [ + "own", + "team", + "public" + ], + "type": "string" + }, + "shared_signals": { + "$ref": "#/properties/data/properties/person" + }, + "team": { + "$ref": "#/properties/data/properties/person" + } + }, + "type": "object" + }, + "error": { + "description": "A human-readable error when ok is false.", + "type": "string" + }, + "ok": { + "description": "Whether noticed completed the operation.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
- Changed
get_sharing1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": true, + "description": "The operation result when ok is true.", + "properties": { + "canonical_url": { + "type": "string" + }, + "effective_role": { + "type": "string" + }, + "general_access": { + "type": "string" + }, + "general_access_role": { + "type": [ + "string", + "null" + ] + }, + "is_published": { + "type": "boolean" + }, + "public_url": { + "$ref": "#/properties/data/properties/general_access_role" + }, + "resource_id": { + "type": "string" + }, + "resource_type": { + "enum": [ + "list", + "view" + ], + "type": "string" + } + }, + "required": [ + "resource_id" + ], + "type": "object" + }, + "error": { + "description": "A human-readable error when ok is false.", + "type": "string" + }, + "ok": { + "description": "Whether noticed completed the operation.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
- Changed
get_view1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": true, + "description": "The operation result when ok is true.", + "properties": { + "created_at": { + "type": "string" + }, + "definition": { + "additionalProperties": true, + "properties": {}, + "type": "object" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "effective_role": { + "type": "string" + }, + "name": { + "type": "string" + }, + "organization_id": { + "$ref": "#/properties/data/properties/description" + }, + "updated_at": { + "type": "string" + }, + "view_id": { + "type": "string" + } + }, + "required": [ + "view_id", + "name" + ], + "type": "object" + }, + "error": { + "description": "A human-readable error when ok is false.", + "type": "string" + }, + "ok": { + "description": "Whether noticed completed the operation.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
- Changed
get_voice_rules1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": true, + "description": "The operation result when ok is true.", + "properties": { + "rules": { + "type": "string" + } + }, + "required": [ + "rules" + ], + "type": "object" + }, + "error": { + "description": "A human-readable error when ok is false.", + "type": "string" + }, + "ok": { + "description": "Whether noticed completed the operation.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
- Changed
list_actions1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": true, + "description": "The operation result when ok is true.", + "properties": { + "actions": { + "items": { + "additionalProperties": true, + "properties": { + "action_id": { + "type": "string" + }, + "id": { + "type": "string" + }, + "person_id": { + "type": "string" + }, + "remind_at": { + "type": [ + "string", + "null" + ] + }, + "status": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "total": { + "type": "number" + } + }, + "required": [ + "actions", + "total" + ], + "type": "object" + }, + "error": { + "description": "A human-readable error when ok is false.", + "type": "string" + }, + "ok": { + "description": "Whether noticed completed the operation.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
- Changed
list_identity_matches1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": true, + "description": "The operation result when ok is true.", + "properties": { + "matches": { + "items": { + "additionalProperties": true, + "properties": {}, + "type": "object" + }, + "type": "array" + }, + "total": { + "type": "number" + } + }, + "required": [ + "matches", + "total" + ], + "type": "object" + }, + "error": { + "description": "A human-readable error when ok is false.", + "type": "string" + }, + "ok": { + "description": "Whether noticed completed the operation.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
- Changed
list_intros1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": true, + "description": "The operation result when ok is true.", + "properties": { + "intros": { + "items": { + "additionalProperties": true, + "properties": { + "connector_name": { + "type": "string" + }, + "connector_person_id": { + "type": "string" + }, + "id": { + "type": "string" + }, + "notes": { + "$ref": "#/properties/data/properties/intros/items/properties/target_org" + }, + "resolved_person_id": { + "$ref": "#/properties/data/properties/intros/items/properties/target_org" + }, + "status": { + "type": "string" + }, + "target_name": { + "type": "string" + }, + "target_org": { + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "type": "array" + }, + "total": { + "type": "number" + } + }, + "required": [ + "intros", + "total" + ], + "type": "object" + }, + "error": { + "description": "A human-readable error when ok is false.", + "type": "string" + }, + "ok": { + "description": "Whether noticed completed the operation.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
- Changed
list_lists1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": false, + "description": "The operation result when ok is true.", + "properties": { + "lists": { + "items": { + "additionalProperties": true, + "properties": { + "ai_enabled": { + "type": "boolean" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "list_id": { + "type": "string" + }, + "member_count": { + "type": "number" + }, + "name": { + "type": "string" + }, + "organization_id": { + "$ref": "#/properties/data/properties/lists/items/properties/description" + }, + "pending_count": { + "type": "number" + } + }, + "required": [ + "list_id", + "name" + ], + "type": "object" + }, + "type": "array" + }, + "total": { + "type": "number" + } + }, + "required": [ + "lists", + "total" + ], + "type": "object" + }, + "error": { + "description": "A human-readable error when ok is false.", + "type": "string" + }, + "ok": { + "description": "Whether noticed completed the operation.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
- Changed
list_profile_gaps1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": true, + "description": "The operation result when ok is true.", + "properties": { + "gaps": { + "items": { + "additionalProperties": true, + "properties": {}, + "type": "object" + }, + "type": "array" + }, + "total": { + "type": "number" + } + }, + "required": [ + "gaps", + "total" + ], + "type": "object" + }, + "error": { + "description": "A human-readable error when ok is false.", + "type": "string" + }, + "ok": { + "description": "Whether noticed completed the operation.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
- Changed
list_views1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": false, + "description": "The operation result when ok is true.", + "properties": { + "views": { + "items": { + "additionalProperties": true, + "properties": { + "created_at": { + "type": "string" + }, + "definition": { + "additionalProperties": true, + "properties": {}, + "type": "object" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "effective_role": { + "type": "string" + }, + "name": { + "type": "string" + }, + "organization_id": { + "$ref": "#/properties/data/properties/views/items/properties/description" + }, + "updated_at": { + "type": "string" + }, + "view_id": { + "type": "string" + } + }, + "required": [ + "view_id", + "name" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "views" + ], + "type": "object" + }, + "error": { + "description": "A human-readable error when ok is false.", + "type": "string" + }, + "ok": { + "description": "Whether noticed completed the operation.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
- Changed
log_interaction1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": true, + "description": "The operation result when ok is true.", + "properties": {}, + "type": "object" + }, + "error": { + "description": "A human-readable error when ok is false.", + "type": "string" + }, + "ok": { + "description": "Whether noticed completed the operation.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
- Changed
mark_different_people1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": true, + "description": "The operation result when ok is true.", + "properties": { + "marked_different": { + "type": "boolean" + }, + "message": { + "type": "string" + } + }, + "required": [ + "marked_different", + "message" + ], + "type": "object" + }, + "error": { + "description": "A human-readable error when ok is false.", + "type": "string" + }, + "ok": { + "description": "Whether noticed completed the operation.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
- Changed
memory_get1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": true, + "description": "The operation result when ok is true.", + "properties": { + "content": { + "type": "string" + }, + "createdAt": { + "type": "string" + }, + "id": { + "type": "string" + }, + "memoryType": { + "type": "string" + }, + "similarity": { + "type": "number" + }, + "sourceDate": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "content" + ], + "type": "object" + }, + "error": { + "description": "A human-readable error when ok is false.", + "type": "string" + }, + "ok": { + "description": "Whether noticed completed the operation.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
- Changed
memory_save1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": true, + "description": "The operation result when ok is true.", + "properties": { + "action": { + "type": "string" + }, + "prmMemoryId": { + "type": "string" + }, + "stored": { + "type": "boolean" + } + }, + "required": [ + "stored", + "action" + ], + "type": "object" + }, + "error": { + "description": "A human-readable error when ok is false.", + "type": "string" + }, + "ok": { + "description": "Whether noticed completed the operation.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
- Changed
memory_search1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "description": "The operation result when ok is true.", + "items": { + "additionalProperties": true, + "properties": { + "content": { + "type": "string" + }, + "createdAt": { + "type": "string" + }, + "id": { + "type": "string" + }, + "memoryType": { + "type": "string" + }, + "similarity": { + "type": "number" + }, + "sourceDate": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "content" + ], + "type": "object" + }, + "type": "array" + }, + "error": { + "description": "A human-readable error when ok is false.", + "type": "string" + }, + "ok": { + "description": "Whether noticed completed the operation.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
- Changed
move_profile_to_person1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": true, + "description": "The operation result when ok is true.", + "properties": {}, + "type": "object" + }, + "error": { + "description": "A human-readable error when ok is false.", + "type": "string" + }, + "ok": { + "description": "Whether noticed completed the operation.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
- Changed
my_profile1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": true, + "description": "The operation result when ok is true.", + "properties": {}, + "type": "object" + }, + "error": { + "description": "A human-readable error when ok is false.", + "type": "string" + }, + "ok": { + "description": "Whether noticed completed the operation.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
- Changed
network_summary1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": true, + "description": "The operation result when ok is true.", + "properties": { + "scope": { + "enum": [ + "own", + "team" + ], + "type": "string" + }, + "sources": { + "items": { + "additionalProperties": true, + "properties": {}, + "type": "object" + }, + "type": "array" + }, + "team": { + "$ref": "#/properties/data/properties/sources/items" + }, + "teams": { + "$ref": "#/properties/data/properties/sources" + }, + "total": { + "type": "number" + } + }, + "type": "object" + }, + "error": { + "description": "A human-readable error when ok is false.", + "type": "string" + }, + "ok": { + "description": "Whether noticed completed the operation.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
- Changed
reject_list_suggestion1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": false, + "description": "The operation result when ok is true.", + "properties": { + "list_id": { + "type": "string" + }, + "person_id": { + "type": "string" + }, + "remaining_pending": { + "type": "number" + } + }, + "required": [ + "list_id", + "person_id", + "remaining_pending" + ], + "type": "object" + }, + "error": { + "description": "A human-readable error when ok is false.", + "type": "string" + }, + "ok": { + "description": "Whether noticed completed the operation.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
- Changed
remove_from_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": false, + "description": "The operation result when ok is true.", + "properties": { + "list_id": { + "type": "string" + }, + "person_id": { + "type": "string" + }, + "removed": { + "type": "boolean" + } + }, + "required": [ + "list_id", + "person_id", + "removed" + ], + "type": "object" + }, + "error": { + "description": "A human-readable error when ok is false.", + "type": "string" + }, + "ok": { + "description": "Whether noticed completed the operation.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
- Changed
remove_from_network1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": true, + "description": "The operation result when ok is true.", + "properties": { + "archived": { + "type": "boolean" + } + }, + "required": [ + "archived" + ], + "type": "object" + }, + "error": { + "description": "A human-readable error when ok is false.", + "type": "string" + }, + "ok": { + "description": "Whether noticed completed the operation.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
- Changed
resolve_person1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "confidence": { + "type": "number" + }, + "match": { + "additionalProperties": true, + "properties": { + "company": { + "$ref": "#/properties/data/anyOf/0/properties/match/properties/person_id" + }, + "display_name": { + "type": "string" + }, + "headline": { + "$ref": "#/properties/data/anyOf/0/properties/match/properties/person_id" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "person_id": { + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "status": { + "const": "matched", + "type": "string" + } + }, + "required": [ + "status", + "match", + "confidence" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "status": { + "const": "none", + "type": "string" + } + }, + "required": [ + "status" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "alternatives": { + "items": { + "additionalProperties": true, + "properties": { + "company": { + "$ref": "#/properties/data/anyOf/0/properties/match/properties/company" + }, + "confidence": { + "type": "number" + }, + "display_name": { + "$ref": "#/properties/data/anyOf/0/properties/match/properties/display_name" + }, + "headline": { + "$ref": "#/properties/data/anyOf/0/properties/match/properties/headline" + }, + "id": { + "$ref": "#/properties/data/anyOf/0/properties/match/properties/id" + }, + "name": { + "$ref": "#/properties/data/anyOf/0/properties/match/properties/name" + }, + "person_id": { + "$ref": "#/properties/data/anyOf/0/properties/match/properties/person_id" + } + }, + "type": "object" + }, + "type": "array" + }, + "status": { + "const": "ambiguous", + "type": "string" + } + }, + "required": [ + "status", + "alternatives" + ], + "type": "object" + } + ], + "description": "The operation result when ok is true." + }, + "error": { + "description": "A human-readable error when ok is false.", + "type": "string" + }, + "ok": { + "description": "Whether noticed completed the operation.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
- Changed
save_onboarding1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": false, + "description": "The operation result when ok is true.", + "properties": { + "interview_saved": { + "type": "boolean" + }, + "me_person_updated": { + "type": "boolean" + }, + "memories_saved": { + "type": "number" + } + }, + "required": [ + "me_person_updated", + "memories_saved", + "interview_saved" + ], + "type": "object" + }, + "error": { + "description": "A human-readable error when ok is false.", + "type": "string" + }, + "ok": { + "description": "Whether noticed completed the operation.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
- Changed
search_people1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": true, + "description": "The operation result when ok is true.", + "properties": { + "hasMore": { + "type": "boolean" + }, + "hits": { + "items": { + "$ref": "#/properties/data/properties/people/items" + }, + "type": "array" + }, + "limit": { + "type": "number" + }, + "offset": { + "type": "number" + }, + "people": { + "items": { + "additionalProperties": true, + "properties": { + "company": { + "$ref": "#/properties/data/properties/people/items/properties/person_id" + }, + "display_name": { + "type": "string" + }, + "headline": { + "$ref": "#/properties/data/properties/people/items/properties/person_id" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "person_id": { + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "type": "array" + }, + "scope": { + "enum": [ + "own", + "team", + "public" + ], + "type": "string" + }, + "strong_total": { + "type": "number" + }, + "total": { + "type": "number" + } + }, + "type": "object" + }, + "error": { + "description": "A human-readable error when ok is false.", + "type": "string" + }, + "ok": { + "description": "Whether noticed completed the operation.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
- Changed
set_general_access1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": true, + "description": "The operation result when ok is true.", + "properties": { + "canonical_url": { + "type": "string" + }, + "effective_role": { + "type": "string" + }, + "general_access": { + "type": "string" + }, + "general_access_role": { + "type": [ + "string", + "null" + ] + }, + "is_published": { + "type": "boolean" + }, + "public_url": { + "$ref": "#/properties/data/properties/general_access_role" + }, + "resource_id": { + "type": "string" + }, + "resource_type": { + "enum": [ + "list", + "view" + ], + "type": "string" + } + }, + "required": [ + "resource_id" + ], + "type": "object" + }, + "error": { + "description": "A human-readable error when ok is false.", + "type": "string" + }, + "ok": { + "description": "Whether noticed completed the operation.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
- Changed
set_published1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": false, + "description": "The operation result when ok is true.", + "properties": { + "is_published": { + "type": "boolean" + }, + "public_url": { + "type": [ + "string", + "null" + ] + }, + "resource_id": { + "type": "string" + } + }, + "required": [ + "resource_id", + "is_published", + "public_url" + ], + "type": "object" + }, + "error": { + "description": "A human-readable error when ok is false.", + "type": "string" + }, + "ok": { + "description": "Whether noticed completed the operation.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
- Changed
suggest_identity_match1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": true, + "description": "The operation result when ok is true.", + "properties": {}, + "type": "object" + }, + "error": { + "description": "A human-readable error when ok is false.", + "type": "string" + }, + "ok": { + "description": "Whether noticed completed the operation.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
- Changed
track_intro1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": true, + "description": "The operation result when ok is true.", + "properties": { + "intro": { + "additionalProperties": true, + "properties": { + "connector_name": { + "type": "string" + }, + "connector_person_id": { + "type": "string" + }, + "id": { + "type": "string" + }, + "notes": { + "$ref": "#/properties/data/properties/intro/properties/target_org" + }, + "resolved_person_id": { + "$ref": "#/properties/data/properties/intro/properties/target_org" + }, + "status": { + "type": "string" + }, + "target_name": { + "type": "string" + }, + "target_org": { + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + } + }, + "required": [ + "intro" + ], + "type": "object" + }, + "error": { + "description": "A human-readable error when ok is false.", + "type": "string" + }, + "ok": { + "description": "Whether noticed completed the operation.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
- Changed
update_action1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": true, + "description": "The operation result when ok is true.", + "properties": { + "updated": { + "type": "boolean" + } + }, + "required": [ + "updated" + ], + "type": "object" + }, + "error": { + "description": "A human-readable error when ok is false.", + "type": "string" + }, + "ok": { + "description": "Whether noticed completed the operation.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
- Changed
update_list1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": true, + "description": "The operation result when ok is true.", + "properties": { + "ai_enabled": { + "type": "boolean" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "list_id": { + "type": "string" + }, + "member_count": { + "type": "number" + }, + "name": { + "type": "string" + }, + "organization_id": { + "$ref": "#/properties/data/properties/description" + }, + "pending_count": { + "type": "number" + } + }, + "required": [ + "list_id", + "name" + ], + "type": "object" + }, + "error": { + "description": "A human-readable error when ok is false.", + "type": "string" + }, + "ok": { + "description": "Whether noticed completed the operation.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
- Changed
update_person1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": true, + "description": "The operation result when ok is true.", + "properties": { + "updated": { + "type": "boolean" + } + }, + "required": [ + "updated" + ], + "type": "object" + }, + "error": { + "description": "A human-readable error when ok is false.", + "type": "string" + }, + "ok": { + "description": "Whether noticed completed the operation.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
- Changed
update_view1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "properties": { + "data": { + "additionalProperties": true, + "description": "The operation result when ok is true.", + "properties": { + "created_at": { + "type": "string" + }, + "definition": { + "additionalProperties": true, + "properties": {}, + "type": "object" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "effective_role": { + "type": "string" + }, + "name": { + "type": "string" + }, + "organization_id": { + "$ref": "#/properties/data/properties/description" + }, + "updated_at": { + "type": "string" + }, + "view_id": { + "type": "string" + } + }, + "required": [ + "view_id", + "name" + ], + "type": "object" + }, + "error": { + "description": "A human-readable error when ok is false.", + "type": "string" + }, + "ok": { + "description": "Whether noticed completed the operation.", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" +}
50 tool updates
- First observed
accept_identity_match - First observed
accept_list_suggestion - First observed
account_status - First observed
add_memory - First observed
add_note - First observed
add_profile_to_person - First observed
add_to_list - First observed
add_to_network - First observed
complete_action - First observed
create_action - First observed
create_list - First observed
create_view - First observed
delete_action - First observed
delete_list - First observed
delete_view - First observed
dismiss_identity_match - First observed
get_instructions - First observed
get_list - First observed
get_person - First observed
get_sharing - First observed
get_view - First observed
get_voice_rules - First observed
list_actions - First observed
list_identity_matches - First observed
list_intros - First observed
list_lists - First observed
list_profile_gaps - First observed
list_views - First observed
log_interaction - First observed
mark_different_people - First observed
memory_get - First observed
memory_save - First observed
memory_search - First observed
move_profile_to_person - First observed
my_profile - First observed
network_summary - First observed
reject_list_suggestion - First observed
remove_from_list - First observed
remove_from_network - First observed
resolve_person - First observed
save_onboarding - First observed
search_people - First observed
set_general_access - First observed
set_published - First observed
suggest_identity_match - First observed
track_intro - First observed
update_action - First observed
update_list - First observed
update_person - First observed
update_view
Frequently Asked Questions
Claiming proves that you control a remote MCP connector. It does not move, proxy, or interrupt the server.
Open the connector listing, choose Claim ownership, and sign in to Glama.
Complete one verification method:
GitHub identity — fastest for official registry listings. For a namespace such as
io.github.alice/server, link the matching GitHub user, then choose Claim with GitHub. An organization namespace such asio.github.acme/serveralso needs that organization to have installed the Glama AI GitHub App and approved its permissions, because GitHub discloses organization membership only to apps it has installed. Use HTTP or DNS when it has not.HTTP challenge — works when you can deploy a public file. Generate a token, publish the exact JSON Glama shows at
/.well-known/glama.jsonon the same origin as the connector, then choose Check HTTP challenge.DNS challenge — works when you control DNS but cannot change the server. Generate a token, create the exact TXT record Glama shows, wait for it to propagate, then choose Check DNS challenge.
After verification, Glama sends a confirmation email and gives you access to listing details, thumbnails, health checks, and analytics. Keep the HTTP file or DNS record in place: Glama periodically checks it and ownership remains verified while the token is discoverable.
The HTTP ownership file has this structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"claim": "glama_claim_..."
}Claim tokens are opaque, stable, and bound to the signed-in Glama account. They contain no email address or other personal information. If Glama can no longer discover a verified HTTP or DNS token, it starts a seven-day grace period before removing claim-based access. Restore the same token during that period to keep ownership verified. Never publish an email address, Glama session token, GitHub token, or connector credential as ownership proof.
If verification fails, confirm that you copied the current token exactly. The HTTP file must be public, return valid JSON with a successful HTTP response, and stay on the connector's origin. DNS changes may need more time to propagate. A claim cannot transfer to a different origin or hostname: if the connector target changes, Glama starts the grace period and the new target must be claimed separately after the previous claim is released.
For a connector linked to the official MCP Registry, registry updates continue to replace its name, description, and URL by default. After claiming, open Manage connector and enable Use Glama listing details as the source of truth if edits made on Glama should be preserved. Categories and thumbnails are always managed on Glama; registry linkage and technical connection settings continue to sync.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
To improve your MCP server's ranking:
Claim ownership of the server listing
Complete the server profile with an accurate description and thumbnail
Provide a test profile so Glama can connect to and evaluate the server
Keep tool definitions clear and complete to earn a high Tool Definition Quality Score (TDQS)
Route real usage through the Glama Gateway; more recorded successful server uses also improve the ranking
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables detection and analysis of pre-public product launches through web search, content extraction, AI-powered scoring, and automated alerting. Provides comprehensive tools for surfacing stealth startup signals before they trend publicly.MIT

industrylens-mcpofficial
AlicenseNot gradedqualityBmaintenanceBrowse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.MIT- AlicenseNot gradedqualityCmaintenanceEnables AI chat clients to perform market research and competitive intelligence by gathering company overviews, competitor lists, product portfolios, pricing snapshots, and recent news via live Tavily search.MIT
- AlicenseAqualityAmaintenanceDetects hiring intent signals by scanning job boards for specific companies. Returns structured role data for outbound sales targeting.11961MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.
TDQS
The tool set is organized around distinct resources, and the descriptions work hard to separate them, but several close pairs remain easy to confuse: add_memory vs memory_save vs add_note, accept_identity_match vs suggest_identity_match, and dismiss_identity_match vs mark_different_people. An agent will often need to read very subtle signals (who originated the content, pending vs initiating a merge, soft vs durable rejection) to pick the right tool.
Most tools follow a clear verb_noun snake_case pattern like create_list, update_person, and delete_view, which is readable and mostly predictable. However, the memory tools break the pattern (memory_save, memory_get, memory_search instead of save_memory/get_memory/search_memory), and a few noun-style names (my_profile, network_summary, account_status) add inconsistency.
At 57 tools, this is an extremely large surface that exceeds the calibration threshold for an extreme mismatch. The scope is broad, but many tools are micro-specialized variations of the same concept, such as four memory-related tools and seven identity-match tools, which makes the count feel inflated rather than well-scoped.
The tool set provides thorough lifecycle coverage for the core domain: people can be added, updated, searched, and removed; lists, views, actions, and scheduled tasks have create/read/update/delete; and identity matching has accept, dismiss, differentiate, and suggest paths. Minor gaps exist, such as no direct memory/note deletion or intro deletion, but agents can generally complete workflows without hitting dead ends.