Skip to main content
Glama

Server Details

Connect your AI assistant to Revnu, your autonomous growth agent for outbound sales, SEO, content, social media and ads. Use this MCP connector to read leads and campaign results, review and approve queued work, hand jobs to your Revnu agent, and schedule recurring workflows from your AI chat. Supports Streamable HTTP and OAuth with permissions you choose at sign-in. Tools act on your connected Revnu account; write actions require explicit permissions. Learn more and connect at https://revnu.com/mcp.

Ownership verified
Status
Healthy
Uptime
99.3% over 21 days
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A3.9/5.0

Scored across 12 tools

Disambiguation5/5

Each tool targets a distinct resource and action (agent status, blocklist, leads, LinkedIn, results, reviews, workflows, token identity). The review tools separate list (queue), get (by id), and search (historical by name/topic) clearly, with descriptions actively guiding proper use.

Naming Consistency4/5

Most tools follow a noun_verb snake_case pattern (lead_get, leads_list, review_search, workflows_list). A few deviate with noun_noun or single-word forms (agent_status, workflow_runs, linkedin_person, whoami), but all remain readable and consistently snake_case.

Tool Count5/5

12 tools is well within the typical 3–15 range, and each covers a distinct read-only resource or query need without obvious redundancy. The count fits the apparent scope of a read-only data surface.

Completeness2/5

The surface is entirely read-only: no tools to approve review cards, modify blocklists, add/update leads, trigger workflows, or perform any write actions, despite descriptions referencing `actions` and a missing `ask_revnu` tool. These are significant gaps that would prevent an agent from acting on the platform.

Available Tools

12 tools
agent_statusGet Revnu StatusA
Read-onlyIdempotent
Inspect

Check whether Revnu is working when the customer asks about progress or agent liveness. Returns status with the sandbox lifecycle state, last activity and finished-turn timestamps, whether a turn is running, and the number and next time of scheduled wakes. Read-only; does not start or interrupt work.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusYesAgent liveness, activity and scheduled work.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false; the description reinforces this and adds genuinely useful scope ('does not start or interrupt work'), which rules out a plausible misinterpretation. It stops short of noting cost, latency, or polling guidance.

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

Conciseness4/5

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

Two tight sentences with the purpose front-loaded and zero filler. Slight redundancy in enumerating return fields (status, timestamps, running turn, scheduled wakes) that the output schema already documents, but it stays compact.

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

Completeness5/5

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

A no-parameter, read-only status probe with an output schema already in place. The description supplies the trigger condition, the read-only guarantee, and a preview of what status covers, so an agent has everything needed to call it correctly.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing for the description to disambiguate. Baseline of 4 applies; the description correctly implies a no-argument call.

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

Purpose5/5

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

Specific verb (check) plus resource (Revnu / agent liveness) with a stated trigger situation. The scope is narrow and unambiguous, and it is easily separable from the surrounding sibling tools (leads, reviews, workflows), none of which overlap.

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

Usage Guidelines4/5

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

Explicitly frames when to call it: 'when the customer asks about progress or agent liveness.' That is a clear usage context, though it names no alternative or exclusion, so an agent must still infer that this is the fallback liveness probe.

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

blocklist_listList Block ListA
Read-onlyIdempotent
Inspect

The customer's block list, newest first: the domains and addresses their agent will never research or contact. Pass back nextCursor for the next page. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum block-list entries per page; default 50, range 1-200.
cursorNoOpaque nextCursor from the previous blocklist_list result. Omit for the first page.

Output Schema

ParametersJSON Schema
NameRequiredDescription
entriesYes
nextCursorYesPass to the next list call; null means the last page.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful behavior beyond annotations: results are ordered 'newest first' and pagination is handled by passing back the returned nextCursor. It does not mention auth requirements or rate limits, but those are less critical here.

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

Conciseness5/5

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

The description is two compact sentences with no wasted words. The core purpose is front-loaded, followed by pagination behavior and the read-only nature.

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

Completeness5/5

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

The tool is simple, has only two fully documented optional parameters, full annotation coverage, and an output schema. The description supplies ordering and pagination guidance, and since an output schema exists, it need not explain return values. Nothing essential is missing for correct invocation.

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

Parameters3/5

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

Schema description coverage is 100%, and the schema already explains both limit and cursor in detail. The description mentions nextCursor for pagination but adds no parameter semantics beyond what the schema provides, so it meets the baseline rather than exceeding it.

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

Purpose5/5

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

The description states a specific resource and scope: 'The customer's block list' with contents defined as 'the domains and addresses their agent will never research or contact.' It is clearly distinguishable from sibling list tools like leads_list, review_list, and workflows_list because the resource is explicitly the customer's block list.

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

Usage Guidelines4/5

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

The description gives clear contextual cues: it is a read-only list, newest first, and instructs the agent to 'Pass back nextCursor for the next page.' It does not explicitly name when to use this tool versus alternatives, but no sibling tool overlaps with the block-list resource.

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

lead_getGet LeadA
Read-onlyIdempotent
Inspect

One lead with its contacts (capped at 50; contactsTruncated says when). Read-only. In hosts that support MCP Apps, the user also sees this result in the Revnu app.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesLead ID returned by leads_list or lead_get.

Output Schema

ParametersJSON Schema
NameRequiredDescription
leadYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is covered. The description adds genuinely new behavioral detail beyond them: contacts are capped at 50 and `contactsTruncated` signals when that cap was hit, plus the MCP Apps rendering note. It stops short of describing not-found or error behavior.

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

Conciseness5/5

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

Three short clauses, front-loaded with the payload shape, then the truncation caveat, then the read-only and UI notes. No filler or restatement of the title.

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

Completeness5/5

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

For a one-parameter lookup with an output schema and full annotation coverage, the description supplies everything an agent needs: singular scope, the 50-contact cap and its truncation flag, and confirmation of read-only behavior. Return-value structure is correctly left to the output schema.

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

Parameters3/5

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

There is a single parameter with 100% schema description coverage, including its pattern and provenance, so the schema does the work. The description adds no additional meaning about the ID beyond what the schema already documents; baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('One lead with its contacts'), and the singular 'One lead' implicitly contrasts with the sibling leads_list, so an agent can route between them without opening a schema. Scope of the payload is also stated (contacts capped at 50).

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

Usage Guidelines3/5

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

Usage is implied rather than stated: fetching a single lead by ID. The description never names leads_list as the alternative for enumerating leads, nor does it say what to do when the ID is unknown. The schema's note that the ID comes from leads_list or lead_get partially compensates, but the description itself gives no explicit 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.

leads_listList LeadsA
Read-onlyIdempotent
Inspect

The customer's leads, newest first, with status and outreach counts but never draft bodies. workflowRunId (a run id from workflow_runs) lists only the leads that run created or added people to, each with runContactIds and runPeople. Pass back nextCursor for the next page. Read-only. In hosts that support MCP Apps, the user also sees this result in the Revnu app.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum leads per page; default 50, range 1-100. Large records may shorten a page.
cursorNoOpaque nextCursor from the previous leads_list result. Omit for the first page; keep the same filters.
statusNoOptional status: qualified, drafted, declined, sent, replied, bounced or partially_sent. Omit for all statuses.
workflowRunIdNoRun ID returned by workflow_runs or workflow_run. Restricts results to leads linked to that run.

Output Schema

ParametersJSON Schema
NameRequiredDescription
leadsYes
nextCursorYesPass to the next list call; null means the last page.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/idempotentHint/destructiveHint, so safety is covered; the description nonetheless adds real context by disclosing that draft bodies are omitted and that in MCP Apps hosts the result is surfaced to the user in the Revnu app. It does not discuss permission requirements, but that is a modest gap given the annotations.

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

Conciseness4/5

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

Four tight sentences, front-loaded with what the tool returns, then filtering, pagination, and host behavior in descending priority. The MCP Apps sentence is the least essential but still earns its place as host-specific behavior.

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

Completeness4/5

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

With an output schema present, return-shape explanation is largely unnecessary, and the description still covers filtering, pagination, and excluded content. Gaps are minor: no guidance on choosing among sibling listing tools and no note on authentication scope.

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

Parameters4/5

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

Schema coverage is already 100%, so the baseline is 3, but the description adds meaning beyond the schema by explaining that run-scoped results carry `runContactIds` and `runPeople`, and by framing `cursor` as an opaque pagination token that must retain the original filters.

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

Purpose5/5

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

States a specific verb (lists), the resource (customer's leads), ordering (newest first), and the returned fields (status and outreach counts, never draft bodies). It is clearly distinguishable from the single-record sibling lead_get without opening either schema.

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

Usage Guidelines4/5

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

Gives concrete operating context: `workflowRunId` narrows the list to leads a run created or touched, and `nextCursor` must be passed back to page while keeping the same filters. It never names an alternative tool or an explicit when-not condition, so the agent must infer that lead_get is for single records.

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

linkedin_personGet LinkedIn PersonA
Read-onlyIdempotent
Inspect

One person's LinkedIn relationship with each of the customer's connected LinkedIn accounts (or the one named in account): whether they're connected, any pending invite and when it was sent, Revnu's own invite record with when it saw acceptance, and the newest 50 messages with who sent each. profile is a linkedin.com/in/ URL or id. Read live from LinkedIn: each account is one paced profile lookup, so look people up as you need them rather than in bulk. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNoName of a connected LinkedIn account. Omit to inspect every connected account; one paced profile lookup per account.
profileYesA linkedin.com/in/ profile URL or LinkedIn profile ID from the customer or a lead contact.

Output Schema

ParametersJSON Schema
NameRequiredDescription
personYesFirst successfully resolved profile across the selected accounts. Null when no account resolves it; inspect accounts.state for the reason.
accountsYesOne result per selected account. Inspect state before using relationship or conversation fields; one account can fail while another succeeds.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so safety is covered; the description adds genuinely new behavior: the data is read live from LinkedIn (freshness), lookups are paced per account (cost/rate context), and the message payload is capped at the newest 50. It stops short of noting pagination or failure behavior for a private/nonexistent profile.

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

Conciseness4/5

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

Every sentence carries information — result shape, parameter format, lookup cost, and read-only status — with no filler. It is dense rather than front-loaded around a single purpose statement, and the trailing 'Read-only' partially duplicates the readOnlyHint annotation.

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

Completeness4/5

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

An output schema exists, so describing return fields is not strictly required, yet the description usefully frames what the caller gets. Combined with the pacing/cost note and parameter format, an agent has enough to call it correctly; the only omission is behavior when the profile is not found or not connected.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description goes further by spelling out the cross-parameter consequence of omitting `account` (one paced lookup per connected account) and restating that `profile` accepts a URL or id. That cost implication is not encoded in the schema and is useful for invocation.

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

Purpose5/5

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

The description names the exact resource (one person's LinkedIn relationship across the customer's connected accounts) and enumerates the returned facets — connection status, pending invite timing, Revnu's invite record, and the newest 50 messages. It is unambiguous and clearly distinct from the sibling tools, which deal with leads, reviews, and workflows.

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

Usage Guidelines4/5

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

It gives concrete operational guidance: look people up on demand rather than in bulk because each connected account costs one paced profile lookup, and it explains that omitting `account` inspects every connected account. It does not explicitly name an alternative tool, but there is no sibling that overlaps, so no exclusion is needed.

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

results_getGet ResultsA
Read-onlyIdempotent
Inspect

The customer's growth scoreboard for a window ending now: per-channel sections that are either {available: true, data} or {available: false, reason}. Zero and unknown are different. since is epoch milliseconds, clamped to the last 31 days; default 24 hours. In hosts that support MCP Apps, the user also sees this result in the Revnu app.

ParametersJSON Schema
NameRequiredDescriptionDefault
sinceNoStart of the reporting window as Unix epoch milliseconds. Omit for 24 hours; clamped to 1 hour through 31 days ago.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description adds real behavior beyond that: window clamping, the 24h default, the zero-vs-unknown distinction, and per-channel degradation via {available: false, reason}. It stops short of covering freshness/latency or what triggers unavailable channels.

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

Conciseness4/5

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

Four compact clauses, front-loaded with the result contract, then parameter semantics, then the MCP Apps note. Dense but each clause carries information; the zero-vs-unknown sentence and the app note are short and non-redundant.

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

Completeness4/5

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

An output schema exists, so the return-value detail is bonus rather than obligation, and combined with the annotation set the agent has enough to call it correctly. Only the absence of any guidance on unavailable-channel reasons or freshness leaves a small gap.

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

Parameters3/5

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

Schema description coverage is 100%, and the schema for `since` is actually more precise than the description (it states the 1-hour-to-31-day range, the description only mentions the 31-day ceiling). With the schema doing the heavy lifting, the baseline of 3 is correct.

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

Purpose4/5

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

The description states a specific resource — 'the customer's growth scoreboard for a window ending now' — with the shape of what comes back (per-channel sections). No sibling tool (review_get, leads_list, workflow_runs) covers a growth scoreboard, so it is distinguishable, but the phrasing is noun-heavy and never states the verb or explicit scope boundaries.

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

Usage Guidelines3/5

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

Usage is implied by the 'growth scoreboard' framing and the default-window note, but there is no explicit when-to-use, when-not-to-use, or pointer to an alternative (e.g. a per-channel or historical variant). An agent can infer intent but gets no routing guidance.

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

review_getGet Review CardA
Read-onlyIdempotent
Inspect

One review card by id, including its full payload (draft text, options, research). Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesReview card ID returned by review_list or review_get.

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemYesThe requested review card.

TDQS

A3.6/5.0
Behavior3/5

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

The annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the description's 'Read-only' is a restatement that adds no new safety information. The one piece of added value is describing what the card payload contains, though an output schema exists that likely covers this.

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

Conciseness5/5

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

A single front-loaded sentence stating the resource, the key, and the payload, with zero filler. Nothing restates the name or wastes the agent's attention.

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

Completeness4/5

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

With rich annotations, full schema coverage, a single required parameter, and an output schema handling return values, the description is nearly complete for a simple fetch. Minor gaps remain around not-found/error behavior and explicit routing away from review_list, but nothing essential to invoking it correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100% and there is only one parameter, whose ID format and provenance are documented in the schema itself. The description adds no additional syntax, format, or validation detail beyond what the schema provides, so baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('One review card by id') and enumerates the payload contents (draft text, options, research), which is more informative than the title alone. It implies the single-item counterpart to review_list but never names or contrasts that sibling explicitly, so it falls short of full sibling differentiation.

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

Usage Guidelines3/5

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

Usage is only implied by 'by id' – an agent infers it should call this when it already holds a card ID (as the schema also notes, IDs come from review_list or review_get). There is no explicit when-to-use versus review_list, no prerequisite statement, and no guidance on what to do if the ID is unknown.

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

review_listList Review QueueA
Read-onlyIdempotent
Inspect

List what is waiting for the customer's approval: drafts, questions, budgets and other cards their revnu growth agent has queued. Each card carries actions, the exact verbs the API accepts for it, and primaryLabel, what the dashboard's main button would say. One call returns up to 50 open cards (pass limit for up to 100; any beyond that are not returned): pending ones and ones the agent is revising together, with status on each card saying which. There is no status filter. Returns compact card summaries to the model; full drafts and evidence are delivered separately to the Revnu app. Use review_get only when the customer asks to inspect a particular draft. One successful call already shows the cards in hosts that support MCP Apps. Do not call again to display them, verify the same list, or fetch the same result with omitted/default arguments. Finish with a short count rather than copying the entire card list into chat. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum open cards to return; default 50, range 1-100. Includes pending and revising cards in one call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemsYesCompact open-card summaries. Full drafts are available through review_get and the app.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only cover the safety/idempotency profile; the description adds substantive behavior: a 50-card default cap that silently drops anything beyond, no status filter, mixed pending/revising statuses, that only compact summaries reach the model while full drafts go to the Revnu app, and that a single call renders cards in MCP Apps hosts.

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

Conciseness4/5

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

Purpose and routing come first, and the anti-patterns at the end are high-value. The description is dense and slightly long, with the limit behavior restated in two places, but nearly every sentence earns its place.

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

Completeness5/5

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

An output schema exists, so return shapes need not be detailed, yet the description still tells the agent what it receives (compact summaries, per-card actions/primaryLabel/status). With one optional param and full annotation coverage, 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.

Parameters3/5

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

Schema description coverage is 100%, so the limit parameter's default, range and scope are already fully documented. The description restates this and adds only the truncation behavior for values beyond the cap, which is return semantics rather than parameter meaning, so the baseline 3 applies.

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

Purpose5/5

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

The description states a specific verb and resource ('List what is waiting for the customer's approval: drafts, questions, budgets and other cards') and explicitly contrasts itself with the sibling review_get. An agent can distinguish this bulk-listing tool from review_get/review_search without opening any schema.

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

Usage Guidelines5/5

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

It gives explicit routing ('Use review_get only when the customer asks to inspect a particular draft') plus hard anti-patterns: do not call again to display, verify the same list, or refetch with omitted/default arguments. It also prescribes the response style (short count, not the full card list), which is unusually complete guidance.

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

whoamiCheck ConnectionA
Read-onlyIdempotent
Inspect

Who this token is: its label, scopes, the revnu account it belongs to, and the rate limits it is held to. Needs no scope. Its scopes say which tools this token can use.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
meYesConnected business, token permissions and rate limits.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint=false, so the safety profile is covered; the description adds genuinely non-redundant behavior by stating that the call requires no scope and that the returned scopes govern which other tools are usable. That auth-and-capability context goes beyond the annotations and is directly actionable.

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

Conciseness4/5

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

Three short sentences, front-loaded with the identity payload and followed by the two constraints that matter (no scope needed; scopes gate other tools). The final sentence restates 'scopes' already listed in sentence one, a small redundancy, and 'revnu' reads as a typo, but overall the text is tight.

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

Completeness4/5

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

For a zero-parameter read tool with an output schema and rich annotations, the description covers the essentials: what is returned, that no scope is required, and how the result informs later calls. The one gap is the absence of any relationship to agent_status, which the agent must guess at.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline is 4; the description correctly says nothing about arguments and instead spends its words on what the call returns. No parameter-level meaning is missing because there are no parameters.

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

Purpose4/5

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

The description enumerates exactly what is returned (token label, scopes, owning account, rate limits), which makes the tool unmistakable against the list/get siblings such as leads_list or workflow_runs. It is a noun phrase rather than a verb+resource, and it never names a sibling, but the resource (the calling token itself) is unique among the sibling set.

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

Usage Guidelines3/5

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

'Needs no scope' and 'its scopes say which tools this token can use' imply the use case (checking credentials and capability before calling other tools), but the description never states when to call this versus agent_status, which is a plausibly overlapping sibling. Usage must be inferred rather than read.

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

workflow_runsList Workflow RunsA
Read-onlyIdempotent
Inspect

Run history for one workflow, newest first, with per-step outcomes. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesworkflowId returned by workflows_list or a workflow write.
limitNoMaximum recent runs; default 10. The API caps at 50 even when a larger value is supplied.

Output Schema

ParametersJSON Schema
NameRequiredDescription
runsYesRun history for the requested workflow, newest first. Empty means no runs are recorded. Queued or running is unfinished; inspect error and stepResults on failed or abandoned runs.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so 'Read-only' adds nothing. The description does add real behavioral context beyond the annotations: results are ordered newest first and include per-step outcomes. It says nothing about pagination or how to reach runs beyond the limit window.

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

Conciseness4/5

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

Very short and front-loaded: scope, ordering, and return shape come first. The trailing 'Read-only.' is pure duplication of readOnlyHint=true and does not earn its place, which keeps this from a 5.

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

Completeness4/5

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

An output schema exists, so return values need not be described, and annotations cover the safety profile. Scope, ordering, and content shape are covered; the only real gap is how an agent retrieves runs older than the limit window, which the capped limit parameter hints at but the description never addresses.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters are fully documented in the schema, including the default and the API's 50-run cap. The description adds no parameter-level meaning beyond 'one workflow', which the schema already conveys. Baseline 3 applies.

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

Purpose4/5

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

States a specific verb (list run history) and resource (one workflow), plus the ordering and the per-step outcome content. It does not explicitly distinguish itself from siblings like workflows_list or results_get, but the resource is narrow enough that confusion is unlikely.

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

Usage Guidelines3/5

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

Usage is only implied: 'for one workflow' suggests you need a workflowId, but there is no when-to-use vs. workflows_list, no statement of when run history is the right call versus results_get, and no exclusions. Adequate but leaves routing to inference.

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

workflows_listList WorkflowsB
Read-onlyIdempotent
Inspect

The customer's recurring workflows with their schedule, next run and steps. Read-only. In hosts that support MCP Apps, the user also sees this result in the Revnu app.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
workflowsYesNon-deleted workflows, including live, paused and proposed workflows; empty when none exist.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so restating 'Read-only' adds nothing. The one genuinely new behavioral detail is that hosts supporting MCP Apps surface the result to the user in the Revnu app, which tells the agent the output is user-visible. That is useful but thin, so a 3 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.

Conciseness4/5

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

Three short sentences, front-loaded with what is returned before the host-behavior aside. The 'Read-only' sentence is redundant against the annotations and is the only wasted line.

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

Completeness4/5

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

With an output schema present, the description need not enumerate return fields, and it correctly avoids doing so while still hinting at the shape (schedule, next run, steps). Annotations carry the safety profile, so nothing critical is missing, though sibling differentiation could be stronger.

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

Parameters4/5

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

The tool takes zero parameters, so there is no parameter semantics for the description to explain; baseline for a no-parameter tool applies. Schema coverage is reported at 100% regardless.

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

Purpose4/5

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

The description names a specific resource and enumerates its contents ('recurring workflows with their schedule, next run and steps'), so an agent knows it lists scheduled workflows rather than workflow executions. It does not explicitly name the sibling it is not (workflow_runs), but the resource framing separates them adequately.

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

Usage Guidelines2/5

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

There is no statement of when to call this versus workflow_runs, nor any prerequisite or context trigger. Usage is only weakly implied by 'the customer's recurring workflows'. With a sibling that lists runs of those workflows, an explicit routing cue is conspicuously absent.

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

Tool Schema Changelog

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

  1. 2 tool updates
    • Changedreview_list9 fields changed
      • changedOutput schema / properties / items / description
        Previous value: -"Open review cards, including revisions."New value: +"Compact open-card summaries. Full drafts are available through review_get and the app."
      • changedOutput schema / properties / items / items / additionalProperties
        Previous value: -trueNew value: +false
      • removedOutput schema / properties / items / items / properties / createdAt
        Removed value: -{
        -  "description": "Unix epoch milliseconds.",
        -  "type": "number"
        -}
      • removedOutput schema / properties / items / items / properties / detail
        Removed value: -{
        -  "description": "Additional context, when available.",
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / items / items / properties / options
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "items": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "label": {
        -            "type": "string"
        -          },
        -          "value": {
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "label",
        -          "value"
        -        ],
        -        "type": "object"
        -      },
        -      "type": "array"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Choices accepted by review_answer with action choose."
        -}
      • removedOutput schema / properties / items / items / properties / payload
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": true,
        -      "properties": {},
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "description": "Source-specific draft, evidence or decision data."
        -}
      • removedOutput schema / properties / items / items / properties / prompt
        Removed value: -{
        -  "description": "The question or approval request.",
        -  "type": "string"
        -}
      • removedOutput schema / properties / items / items / properties / summary
        Removed value: -{
        -  "description": "Short summary, when available.",
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / items / items / properties / updatedAt
        Removed value: -{
        -  "description": "Unix epoch milliseconds.",
        -  "type": "number"
        -}
    • Addedreview_search
  2. 1 tool update
    • Changedagent_status1 field changed
      • changedOutput schema / properties / status / properties / running / description
        Previous value: -"Whether recent invocation telemetry indicates an unfinished turn within the last 30 minutes. Poll agent_message_status for a particular request."New value: +"Whether a started turn has no exit yet and the agent wrote activity in the last 20 minutes. Poll agent_message_status for a particular request."
  3. 2 tool updates
    • Changedlead_get3 fields changed
      • changedOutput schema / properties / lead / properties / runPeople / description
        Previous value: -"People the filtered workflow run added to this company's research list but not as contacts."New value: +"People the filtered workflow run returned on this company's research list but not as contacts."
      • addedOutput schema / properties / lead / properties / runPeople / items / properties / alreadyKnown
        Added value: +{
        +  "description": "True when the company already had this person before the run.",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / lead / properties / runPeople / items / properties / role
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "economic",
        +        "champion",
        +        "technical",
        +        "user"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Part in the deal: economic is the buyer, champion the inside advocate."
        +}
    • Changedleads_list3 fields changed
      • changedOutput schema / properties / leads / items / properties / runPeople / description
        Previous value: -"People the filtered workflow run added to this company's research list but not as contacts."New value: +"People the filtered workflow run returned on this company's research list but not as contacts."
      • addedOutput schema / properties / leads / items / properties / runPeople / items / properties / alreadyKnown
        Added value: +{
        +  "description": "True when the company already had this person before the run.",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / leads / items / properties / runPeople / items / properties / role
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "economic",
        +        "champion",
        +        "technical",
        +        "user"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Part in the deal: economic is the buyer, champion the inside advocate."
        +}
  4. 3 tool updates
    • Changedlead_get1 field changed
      • addedOutput schema / properties / lead / properties / runPeople
        Added value: +{
        +  "description": "People the filtered workflow run added to this company's research list but not as contacts.",
        +  "items": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "email": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "linkedinUrl": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "name": {
        +        "type": "string"
        +      },
        +      "photoUrl": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "profileUrl": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "title": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "required": [
        +      "name",
        +      "title",
        +      "email",
        +      "linkedinUrl",
        +      "profileUrl",
        +      "photoUrl"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
    • Changedleads_list1 field changed
      • addedOutput schema / properties / leads / items / properties / runPeople
        Added value: +{
        +  "description": "People the filtered workflow run added to this company's research list but not as contacts.",
        +  "items": {
        +    "additionalProperties": true,
        +    "properties": {
        +      "email": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "linkedinUrl": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "name": {
        +        "type": "string"
        +      },
        +      "photoUrl": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "profileUrl": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "title": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "required": [
        +      "name",
        +      "title",
        +      "email",
        +      "linkedinUrl",
        +      "profileUrl",
        +      "photoUrl"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
    • Changedworkflow_runs2 fields changed
      • changedOutput schema / properties / runs / items / properties / found / properties / contacts / description
        Previous value: -"People first saved by this run."New value: +"Contacts first saved by this run."
      • addedOutput schema / properties / runs / items / properties / found / properties / people
        Added value: +{
        +  "description": "People this run added to a company's research list but not as contacts.",
        +  "type": "number"
        +}
  5. 8 tool updates
    • Changedagent_status5 fields changed
      • changedOutput schema / properties / status / properties / lastActivityAt / description
        Previous value: -"Unix epoch milliseconds."New value: +"Most recent sandbox activity as Unix epoch milliseconds, or null when none is recorded."
      • changedOutput schema / properties / status / properties / lastTurnAt / description
        Previous value: -"Unix epoch milliseconds."New value: +"Most recent turn exit found in recent telemetry, as Unix epoch milliseconds, or null when none is found."
      • changedOutput schema / properties / status / properties / nextWakeAt / description
        Previous value: -"Unix epoch milliseconds."New value: +"Earliest pending wakeup as Unix epoch milliseconds, or null when none is scheduled."
      • addedOutput schema / properties / status / properties / pendingWakes / description
        Added value: +"Pending scheduled wakeups for this business, capped at 100; 100 can mean more exist."
      • addedOutput schema / properties / status / properties / running / description
        Added value: +"Whether recent invocation telemetry indicates an unfinished turn within the last 30 minutes. Poll agent_message_status for a particular request."
    • Changedblocklist_list3 fields changed
      • changedOutput schema / properties / entries / items / properties / addedAt / description
        Previous value: -"Unix epoch milliseconds."New value: +"When the block was added, as Unix epoch milliseconds."
      • addedOutput schema / properties / entries / items / properties / addedBy / description
        Added value: +"Recorded actor who added the block, or null when unknown."
      • addedOutput schema / properties / entries / items / properties / reason / description
        Added value: +"Why this identity was blocked, or null when not recorded."
    • Changedlead_get12 fields changed
      • addedOutput schema / properties / lead / properties / archetype / description
        Added value: +"Customer-defined buyer or company archetype."
      • addedOutput schema / properties / lead / properties / companyName / description
        Added value: +"Company name, or null when not recorded."
      • changedOutput schema / properties / lead / properties / contact / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {
        -      "email": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "linkedinUrl": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "name": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "photoUrl": {
        -        "description": "Sourced profile photo; use it when displaying a person.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "title": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "email": {
        +        "description": "Contact email address, or null when unknown.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "linkedinUrl": {
        +        "description": "Contact's LinkedIn profile URL, when known.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "name": {
        +        "description": "Contact's sourced full name, or null when unknown.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "photoUrl": {
        +        "description": "Sourced profile photo; use it when displaying a person.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "title": {
        +        "description": "Contact's job title, or null when unknown.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / lead / properties / contacts / items / properties / email / description
        Added value: +"Contact email address, or null when unknown."
      • addedOutput schema / properties / lead / properties / contacts / items / properties / linkedinUrl / description
        Added value: +"Contact's LinkedIn profile URL, when known."
      • addedOutput schema / properties / lead / properties / contacts / items / properties / name / description
        Added value: +"Contact's sourced full name, or null when unknown."
      • addedOutput schema / properties / lead / properties / contacts / items / properties / title / description
        Added value: +"Contact's job title, or null when unknown."
      • changedOutput schema / properties / lead / properties / createdAt / description
        Previous value: -"Unix epoch milliseconds."New value: +"When this lead was saved, as Unix epoch milliseconds."
      • addedOutput schema / properties / lead / properties / fields / items / properties / key / description
        Added value: +"Configured lead-column key."
      • addedOutput schema / properties / lead / properties / fields / items / properties / value / description
        Added value: +"Stored column value, truncated to the API's display limit."
      • addedOutput schema / properties / lead / properties / tags / description
        Added value: +"Labels assigned to this lead."
      • addedOutput schema / properties / lead / properties / vertical / description
        Added value: +"Customer-defined industry category."
    • Changedleads_list12 fields changed
      • addedOutput schema / properties / leads / items / properties / archetype / description
        Added value: +"Customer-defined buyer or company archetype."
      • addedOutput schema / properties / leads / items / properties / companyName / description
        Added value: +"Company name, or null when not recorded."
      • changedOutput schema / properties / leads / items / properties / contact / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {
        -      "email": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "linkedinUrl": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "name": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "photoUrl": {
        -        "description": "Sourced profile photo; use it when displaying a person.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "title": {
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "email": {
        +        "description": "Contact email address, or null when unknown.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "linkedinUrl": {
        +        "description": "Contact's LinkedIn profile URL, when known.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "name": {
        +        "description": "Contact's sourced full name, or null when unknown.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "photoUrl": {
        +        "description": "Sourced profile photo; use it when displaying a person.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "title": {
        +        "description": "Contact's job title, or null when unknown.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / leads / items / properties / contacts / items / properties / email / description
        Added value: +"Contact email address, or null when unknown."
      • addedOutput schema / properties / leads / items / properties / contacts / items / properties / linkedinUrl / description
        Added value: +"Contact's LinkedIn profile URL, when known."
      • addedOutput schema / properties / leads / items / properties / contacts / items / properties / name / description
        Added value: +"Contact's sourced full name, or null when unknown."
      • addedOutput schema / properties / leads / items / properties / contacts / items / properties / title / description
        Added value: +"Contact's job title, or null when unknown."
      • changedOutput schema / properties / leads / items / properties / createdAt / description
        Previous value: -"Unix epoch milliseconds."New value: +"When this lead was saved, as Unix epoch milliseconds."
      • addedOutput schema / properties / leads / items / properties / fields / items / properties / key / description
        Added value: +"Configured lead-column key."
      • addedOutput schema / properties / leads / items / properties / fields / items / properties / value / description
        Added value: +"Stored column value, truncated to the API's display limit."
      • addedOutput schema / properties / leads / items / properties / tags / description
        Added value: +"Labels assigned to this lead."
      • addedOutput schema / properties / leads / items / properties / vertical / description
        Added value: +"Customer-defined industry category."
    • Changedlinkedin_person7 fields changed
      • changedOutput schema / properties / accounts / description
        Previous value: -"Connection, invitation and conversation state per connected account."New value: +"One result per selected account. Inspect state before using relationship or conversation fields; one account can fail while another succeeds."
      • removedOutput schema / properties / accounts / items / additionalProperties
        Removed value: -true
      • addedOutput schema / properties / accounts / items / anyOf
        Added value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "account": {
        +        "description": "Connected account label; pass it as linkedin_person.account to read only this account.",
        +        "type": "string"
        +      },
        +      "connected": {
        +        "description": "True when LinkedIn reports a first-degree connection to this person.",
        +        "type": "boolean"
        +      },
        +      "connectedAs": {
        +        "description": "Connected LinkedIn identity label, or null when unknown.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "invite": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "at": {
        +                "description": "Invitation creation time as Unix epoch milliseconds, or null when unavailable.",
        +                "type": [
        +                  "number",
        +                  "null"
        +                ]
        +              },
        +              "direction": {
        +                "anyOf": [
        +                  {
        +                    "enum": [
        +                      "sent",
        +                      "received"
        +                    ],
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "description": "Who initiated the invitation, or null when LinkedIn does not identify a direction."
        +              },
        +              "status": {
        +                "anyOf": [
        +                  {
        +                    "enum": [
        +                      "pending",
        +                      "ignored",
        +                      "withdrawn"
        +                    ],
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "description": "Invitation state reported by the relationship lookup."
        +              }
        +            },
        +            "required": [
        +              "direction",
        +              "status",
        +              "at"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "LinkedIn's invitation state; null for an existing connection or no visible invitation."
        +      },
        +      "lastReplyAt": {
        +        "description": "Time of the newest incoming entry in the returned history, as Unix epoch milliseconds; null if none is present.",
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "messages": {
        +        "description": "Newest conversation entries, merged across inboxes and returned oldest first. An empty array means no visible messages.",
        +        "items": {
        +          "additionalProperties": true,
        +          "properties": {
        +            "at": {
        +              "description": "Message time as Unix epoch milliseconds.",
        +              "type": "number"
        +            },
        +            "from": {
        +              "description": "Whether the connected account or the looked-up person sent this entry.",
        +              "enum": [
        +                "you",
        +                "them"
        +              ],
        +              "type": "string"
        +            },
        +            "kind": {
        +              "description": "Conversation entry type; events and invitations may have no text.",
        +              "enum": [
        +                "message",
        +                "event",
        +                "inmail",
        +                "invitation"
        +              ],
        +              "type": "string"
        +            },
        +            "sentBy": {
        +              "anyOf": [
        +                {
        +                  "enum": [
        +                    "agent",
        +                    "person"
        +                  ],
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "description": "For outgoing messages: agent means Revnu, person means a human in Revnu's inbox, and null means native LinkedIn or unknown. Incoming entries are null."
        +            },
        +            "text": {
        +              "description": "Message or event text, or null when unavailable.",
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            }
        +          },
        +          "required": [
        +            "at",
        +            "from",
        +            "sentBy",
        +            "kind",
        +            "text"
        +          ],
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "messagesTruncated": {
        +        "description": "True when older messages or additional inboxes were omitted; history is limited to 50 entries from up to three chats.",
        +        "type": "boolean"
        +      },
        +      "revnuInvite": {
        +        "anyOf": [
        +          {
        +            "additionalProperties": true,
        +            "properties": {
        +              "acceptedAt": {
        +                "description": "When Revnu observed acceptance, or null when not recorded.",
        +                "type": [
        +                  "number",
        +                  "null"
        +                ]
        +              },
        +              "sentAt": {
        +                "description": "When Revnu sent its most recent invitation from this account, as Unix epoch milliseconds.",
        +                "type": "number"
        +              },
        +              "withdrawnAt": {
        +                "description": "When the invitation was withdrawn, or null when not recorded.",
        +                "type": [
        +                  "number",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "required": [
        +              "sentAt",
        +              "acceptedAt",
        +              "withdrawnAt"
        +            ],
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Revnu's own invitation history, independent of LinkedIn's current invite state; null if Revnu has no record."
        +      },
        +      "state": {
        +        "const": "ok",
        +        "description": "The profile and conversation lookup succeeded for this account.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "account",
        +      "connectedAs",
        +      "state",
        +      "connected",
        +      "invite",
        +      "revnuInvite",
        +      "messages",
        +      "messagesTruncated",
        +      "lastReplyAt"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "account": {
        +        "description": "Connected account label; pass it as linkedin_person.account to read only this account.",
        +        "type": "string"
        +      },
        +      "connectedAs": {
        +        "description": "Connected LinkedIn identity label, or null when unknown.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "state": {
        +        "const": "not_connected",
        +        "description": "This account has no usable LinkedIn connection; relationship and conversation fields are unavailable.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "account",
        +      "connectedAs",
        +      "state"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "account": {
        +        "description": "Connected account label; pass it as linkedin_person.account to read only this account.",
        +        "type": "string"
        +      },
        +      "connectedAs": {
        +        "description": "Connected LinkedIn identity label, or null when unknown.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "state": {
        +        "const": "needs_reauth",
        +        "description": "This account must reconnect LinkedIn before the lookup can proceed.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "account",
        +      "connectedAs",
        +      "state"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "account": {
        +        "description": "Connected account label; pass it as linkedin_person.account to read only this account.",
        +        "type": "string"
        +      },
        +      "connectedAs": {
        +        "description": "Connected LinkedIn identity label, or null when unknown.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "message": {
        +        "description": "Why the lookup is paced.",
        +        "type": "string"
        +      },
        +      "retryAt": {
        +        "description": "Earliest retry time as Unix epoch milliseconds; wait until then before retrying this account.",
        +        "type": "number"
        +      },
        +      "state": {
        +        "const": "paced",
        +        "description": "The profile read was deferred by account pacing, not a missing relationship.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "account",
        +      "connectedAs",
        +      "state",
        +      "message",
        +      "retryAt"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "account": {
        +        "description": "Connected account label; pass it as linkedin_person.account to read only this account.",
        +        "type": "string"
        +      },
        +      "connectedAs": {
        +        "description": "Connected LinkedIn identity label, or null when unknown.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "message": {
        +        "description": "Lookup failure detail, such as an unresolved profile or unavailable conversation.",
        +        "type": "string"
        +      },
        +      "state": {
        +        "const": "error",
        +        "description": "This account's lookup failed; do not interpret absent relationship data as disconnected.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "account",
        +      "connectedAs",
        +      "state",
        +      "message"
        +    ],
        +    "type": "object"
        +  }
        +]
      • removedOutput schema / properties / accounts / items / properties
        Removed value: -{}
      • removedOutput schema / properties / accounts / items / type
        Removed value: -"object"
      • changedOutput schema / properties / person / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": true,
        +    "properties": {
        +      "headline": {
        +        "description": "LinkedIn profile headline, or null when not returned.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "name": {
        +        "description": "Profile name assembled from the returned first and last names, or null when unavailable.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "providerId": {
        +        "description": "LinkedIn's provider identifier for this person, or null when not returned.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "publicIdentifier": {
        +        "description": "Public profile slug from linkedin.com/in/<slug>, or null when not returned.",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "required": [
        +      "providerId",
        +      "publicIdentifier",
        +      "name",
        +      "headline"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / properties / person / description
        Previous value: -"Resolved LinkedIn person, or null when unresolved."New value: +"First successfully resolved profile across the selected accounts. Null when no account resolves it; inspect accounts.state for the reason."
    • Changedwhoami22 fields changed
      • addedOutput schema / properties / me / properties / account / description
        Added value: +"The business this connection operates on."
      • addedOutput schema / properties / me / properties / account / properties / id / description
        Added value: +"Revnu business account ID that owns this token."
      • addedOutput schema / properties / me / properties / account / properties / name / description
        Added value: +"Business display name, or null before one is known."
      • changedOutput schema / properties / me / properties / createdAt / description
        Previous value: -"Unix epoch milliseconds."New value: +"When this token was issued, as Unix epoch milliseconds."
      • addedOutput schema / properties / me / properties / inSetup / description
        Added value: +"True while onboarding is incomplete. Call setup_status for the exact next step."
      • addedOutput schema / properties / me / properties / label / description
        Added value: +"Human-readable name assigned to this token or connected app."
      • changedOutput schema / properties / me / properties / lastUsedAt / description
        Previous value: -"Unix epoch milliseconds."New value: +"Most recently recorded use as Unix epoch milliseconds, updated at minute granularity; null before any recorded use."
      • addedOutput schema / properties / me / properties / limits / description
        Added value: +"Configured rate-limit capacities, not remaining request balances. An HTTP 429 response supplies Retry-After."
      • addedOutput schema / properties / me / properties / limits / properties / account / description
        Added value: +"Shared request allowance across this business's tokens."
      • addedOutput schema / properties / me / properties / limits / properties / account / properties / burst / description
        Added value: +"Maximum requests accepted in a burst."
      • addedOutput schema / properties / me / properties / limits / properties / account / properties / perMinute / description
        Added value: +"Configured request rate per minute."
      • addedOutput schema / properties / me / properties / limits / properties / messages / description
        Added value: +"Agent-message allowance for this token."
      • addedOutput schema / properties / me / properties / limits / properties / messages / properties / burst / description
        Added value: +"Maximum requests accepted in a burst."
      • addedOutput schema / properties / me / properties / limits / properties / messages / properties / perMinute / description
        Added value: +"Configured request rate per minute."
      • addedOutput schema / properties / me / properties / limits / properties / reads / description
        Added value: +"Read-request allowance for this token."
      • addedOutput schema / properties / me / properties / limits / properties / reads / properties / burst / description
        Added value: +"Maximum requests accepted in a burst."
      • addedOutput schema / properties / me / properties / limits / properties / reads / properties / perMinute / description
        Added value: +"Configured request rate per minute."
      • addedOutput schema / properties / me / properties / limits / properties / writes / description
        Added value: +"Write-request allowance for this token."
      • addedOutput schema / properties / me / properties / limits / properties / writes / properties / burst / description
        Added value: +"Maximum requests accepted in a burst."
      • addedOutput schema / properties / me / properties / limits / properties / writes / properties / perMinute / description
        Added value: +"Configured request rate per minute."
      • addedOutput schema / properties / me / properties / scopes / description
        Added value: +"Permissions granted to this token. A missing scope does not mean the business lacks that capability."
      • addedOutput schema / properties / me / properties / tokenId / description
        Added value: +"Identifier of this access token, not its secret bearer value."
    • Changedworkflow_runs17 fields changed
      • changedOutput schema / properties / runs / description
        Previous value: -"Newest runs first."New value: +"Run history for the requested workflow, newest first. Empty means no runs are recorded. Queued or running is unfinished; inspect error and stepResults on failed or abandoned runs."
      • addedOutput schema / properties / runs / items / properties / error / description
        Added value: +"Reported failure or abandonment reason, or null when none is recorded."
      • changedOutput schema / properties / runs / items / properties / finishedAt / description
        Previous value: -"Unix epoch milliseconds."New value: +"Completion time as Unix epoch milliseconds, or null while unfinished."
      • addedOutput schema / properties / runs / items / properties / found / description
        Added value: +"New records attributed to this run. Use its id in leads_list.workflowRunId to inspect them."
      • addedOutput schema / properties / runs / items / properties / found / properties / contacts / description
        Added value: +"People first saved by this run."
      • addedOutput schema / properties / runs / items / properties / found / properties / leads / description
        Added value: +"Companies first saved by this run."
      • addedOutput schema / properties / runs / items / properties / headline / description
        Added value: +"Agent's summary of the run, or null before one is reported."
      • changedOutput schema / properties / runs / items / properties / startedAt / description
        Previous value: -"Unix epoch milliseconds."New value: +"Run start or queue time as Unix epoch milliseconds."
      • changedOutput schema / properties / runs / items / properties / stepResults / description
        Previous value: -"Per-step outcomes and linked review cards."New value: +"Reported steps with their latest outcomes, notes and review-card links; empty before any step reports."
      • addedOutput schema / properties / runs / items / properties / stepResults / items / properties / at
        Added value: +{
        +  "description": "When this step reported, as Unix epoch milliseconds.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / runs / items / properties / stepResults / items / properties / gateUnmet
        Added value: +{
        +  "description": "True when a required approval step reported without a valid approval card as evidence.",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / runs / items / properties / stepResults / items / properties / note
        Added value: +{
        +  "description": "Additional explanation, or null when omitted.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / runs / items / properties / stepResults / items / properties / outcome
        Added value: +{
        +  "description": "Agent-reported outcome text; this is not a fixed status enum.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / runs / items / properties / stepResults / items / properties / reviewItemId
        Added value: +{
        +  "description": "Linked review card ID for review_get, or null when none was created.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / runs / items / properties / stepResults / items / properties / stepId
        Added value: +{
        +  "description": "ID of the workflow step that reported this outcome.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / runs / items / properties / stepResults / items / required
        Added value: +[
        +  "stepId",
        +  "outcome",
        +  "note",
        +  "at",
        +  "reviewItemId",
        +  "gateUnmet"
        +]
      • addedOutput schema / properties / runs / items / properties / workflowVersion
        Added value: +{
        +  "description": "Workflow revision captured for this run; it may differ from the current workflow version.",
        +  "type": "number"
        +}
    • Changedworkflows_list13 fields changed
      • addedOutput schema / properties / workflows / description
        Added value: +"Non-deleted workflows, including live, paused and proposed workflows; empty when none exist."
      • addedOutput schema / properties / workflows / items / properties / deliverTo
        Added value: +{
        +  "description": "Configured delivery destination, or null when unset.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / workflows / items / properties / description / description
        Added value: +"The recurring growth job this workflow performs."
      • changedOutput schema / properties / workflows / items / properties / nextRunAt / description
        Previous value: -"Unix epoch milliseconds."New value: +"Next scheduled run as Unix epoch milliseconds, or null when not scheduled."
      • addedOutput schema / properties / workflows / items / properties / requestedBy
        Added value: +{
        +  "description": "Label of the person who requested the workflow.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / workflows / items / properties / steps / items / properties / details / description
        Added value: +"Instructions for performing this step."
      • addedOutput schema / properties / workflows / items / properties / steps / items / properties / gate / description
        Added value: +"Optional human approval gate."
      • addedOutput schema / properties / workflows / items / properties / steps / items / properties / gate / properties / label / description
        Added value: +"Text identifying the approval gate."
      • addedOutput schema / properties / workflows / items / properties / steps / items / properties / gate / properties / on / description
        Added value: +"Whether this step requires human approval."
      • addedOutput schema / properties / workflows / items / properties / steps / items / properties / id / description
        Added value: +"Stable step ID used by run stepResults and workflow updates."
      • addedOutput schema / properties / workflows / items / properties / steps / items / properties / title / description
        Added value: +"The task this step performs."
      • addedOutput schema / properties / workflows / items / properties / url
        Added value: +{
        +  "description": "Dashboard URL for opening this workflow.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / workflows / items / properties / version
        Added value: +{
        +  "description": "Current workflow revision; compare with a run's workflowVersion.",
        +  "type": "number"
        +}
  6. 11 tool updates
    • Changedagent_status1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "status": {
        +      "additionalProperties": true,
        +      "description": "Agent liveness, activity and scheduled work.",
        +      "properties": {
        +        "lastActivityAt": {
        +          "description": "Unix epoch milliseconds.",
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "lastTurnAt": {
        +          "description": "Unix epoch milliseconds.",
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "nextWakeAt": {
        +          "description": "Unix epoch milliseconds.",
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "pendingWakes": {
        +          "type": "number"
        +        },
        +        "running": {
        +          "type": "boolean"
        +        },
        +        "sandbox": {
        +          "description": "Sandbox lifecycle state, or none when no sandbox exists.",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "sandbox",
        +        "lastActivityAt",
        +        "running",
        +        "lastTurnAt",
        +        "pendingWakes",
        +        "nextWakeAt"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "status"
        +  ],
        +  "type": "object"
        +}
    • Changedblocklist_list3 fields changed
      • addedInput schema / properties / cursor / description
        Added value: +"Opaque nextCursor from the previous blocklist_list result. Omit for the first page."
      • addedInput schema / properties / limit / description
        Added value: +"Maximum block-list entries per page; default 50, range 1-200."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "entries": {
        +      "items": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "addedAt": {
        +            "description": "Unix epoch milliseconds.",
        +            "type": "number"
        +          },
        +          "addedBy": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "id": {
        +            "description": "Block-list entry ID for blocklist_remove.",
        +            "type": "string"
        +          },
        +          "kind": {
        +            "description": "Blocked identity type, such as domain, email or LinkedIn profile.",
        +            "type": "string"
        +          },
        +          "reason": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "source": {
        +            "description": "Origin of the block; unsubscribe entries cannot be removed.",
        +            "type": "string"
        +          },
        +          "value": {
        +            "description": "Normalized identity that must not be contacted.",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "kind",
        +          "value",
        +          "reason",
        +          "source",
        +          "addedBy",
        +          "addedAt"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "nextCursor": {
        +      "description": "Pass to the next list call; null means the last page.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    }
        +  },
        +  "required": [
        +    "entries",
        +    "nextCursor"
        +  ],
        +  "type": "object"
        +}
    • Changedlead_get2 fields changed
      • addedInput schema / properties / id / description
        Added value: +"Lead ID returned by leads_list or lead_get."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "lead": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "archetype": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "companyName": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "contact": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "properties": {
        +                "email": {
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "linkedinUrl": {
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "name": {
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "photoUrl": {
        +                  "description": "Sourced profile photo; use it when displaying a person.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "title": {
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Primary contact, when available."
        +        },
        +        "contacts": {
        +          "description": "Up to 50 contacts on a detail read.",
        +          "items": {
        +            "additionalProperties": true,
        +            "properties": {
        +              "email": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "linkedinUrl": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "name": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "photoUrl": {
        +                "description": "Sourced profile photo; use it when displaying a person.",
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "title": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "contactsTruncated": {
        +          "description": "True when the contact cap was reached.",
        +          "type": "boolean"
        +        },
        +        "createdAt": {
        +          "description": "Unix epoch milliseconds.",
        +          "type": "number"
        +        },
        +        "domain": {
        +          "description": "Company website domain.",
        +          "type": "string"
        +        },
        +        "fields": {
        +          "description": "The customer's configured lead-column values.",
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "key": {
        +                "type": "string"
        +              },
        +              "value": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "key",
        +              "value"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "id": {
        +          "description": "Lead ID for lead_get and lead_update.",
        +          "type": "string"
        +        },
        +        "runContactIds": {
        +          "description": "Contacts saved by the filtered workflow run.",
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "status": {
        +          "description": "Qualification or outreach state.",
        +          "type": "string"
        +        },
        +        "tags": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "vertical": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "required": [
        +        "id",
        +        "domain"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "lead"
        +  ],
        +  "type": "object"
        +}
    • Changedleads_list5 fields changed
      • addedInput schema / properties / cursor / description
        Added value: +"Opaque nextCursor from the previous leads_list result. Omit for the first page; keep the same filters."
      • addedInput schema / properties / limit / description
        Added value: +"Maximum leads per page; default 50, range 1-100. Large records may shorten a page."
      • addedInput schema / properties / status / description
        Added value: +"Optional status: qualified, drafted, declined, sent, replied, bounced or partially_sent. Omit for all statuses."
      • addedInput schema / properties / workflowRunId / description
        Added value: +"Run ID returned by workflow_runs or workflow_run. Restricts results to leads linked to that run."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "leads": {
        +      "items": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "archetype": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "companyName": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "contact": {
        +            "anyOf": [
        +              {
        +                "additionalProperties": true,
        +                "properties": {
        +                  "email": {
        +                    "type": [
        +                      "string",
        +                      "null"
        +                    ]
        +                  },
        +                  "linkedinUrl": {
        +                    "type": [
        +                      "string",
        +                      "null"
        +                    ]
        +                  },
        +                  "name": {
        +                    "type": [
        +                      "string",
        +                      "null"
        +                    ]
        +                  },
        +                  "photoUrl": {
        +                    "description": "Sourced profile photo; use it when displaying a person.",
        +                    "type": [
        +                      "string",
        +                      "null"
        +                    ]
        +                  },
        +                  "title": {
        +                    "type": [
        +                      "string",
        +                      "null"
        +                    ]
        +                  }
        +                },
        +                "type": "object"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Primary contact, when available."
        +          },
        +          "contacts": {
        +            "description": "Up to 50 contacts on a detail read.",
        +            "items": {
        +              "additionalProperties": true,
        +              "properties": {
        +                "email": {
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "linkedinUrl": {
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "name": {
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "photoUrl": {
        +                  "description": "Sourced profile photo; use it when displaying a person.",
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                },
        +                "title": {
        +                  "type": [
        +                    "string",
        +                    "null"
        +                  ]
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          "contactsTruncated": {
        +            "description": "True when the contact cap was reached.",
        +            "type": "boolean"
        +          },
        +          "createdAt": {
        +            "description": "Unix epoch milliseconds.",
        +            "type": "number"
        +          },
        +          "domain": {
        +            "description": "Company website domain.",
        +            "type": "string"
        +          },
        +          "fields": {
        +            "description": "The customer's configured lead-column values.",
        +            "items": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "key": {
        +                  "type": "string"
        +                },
        +                "value": {
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "key",
        +                "value"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          "id": {
        +            "description": "Lead ID for lead_get and lead_update.",
        +            "type": "string"
        +          },
        +          "runContactIds": {
        +            "description": "Contacts saved by the filtered workflow run.",
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          "status": {
        +            "description": "Qualification or outreach state.",
        +            "type": "string"
        +          },
        +          "tags": {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          "vertical": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "domain"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "nextCursor": {
        +      "description": "Pass to the next list call; null means the last page.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    }
        +  },
        +  "required": [
        +    "leads",
        +    "nextCursor"
        +  ],
        +  "type": "object"
        +}
    • Changedlinkedin_person3 fields changed
      • addedInput schema / properties / account / description
        Added value: +"Name of a connected LinkedIn account. Omit to inspect every connected account; one paced profile lookup per account."
      • addedInput schema / properties / profile / description
        Added value: +"A linkedin.com/in/ profile URL or LinkedIn profile ID from the customer or a lead contact."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "accounts": {
        +      "description": "Connection, invitation and conversation state per connected account.",
        +      "items": {
        +        "additionalProperties": true,
        +        "properties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "person": {
        +      "anyOf": [
        +        {
        +          "additionalProperties": true,
        +          "properties": {},
        +          "type": "object"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Resolved LinkedIn person, or null when unresolved."
        +    }
        +  },
        +  "required": [
        +    "person",
        +    "accounts"
        +  ],
        +  "type": "object"
        +}
    • Changedresults_get2 fields changed
      • addedInput schema / properties / since / description
        Added value: +"Start of the reporting window as Unix epoch milliseconds. Omit for 24 hours; clamped to 1 hour through 31 days ago."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "results": {
        +      "additionalProperties": true,
        +      "properties": {
        +        "ads": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "available": {
        +                  "const": true,
        +                  "type": "boolean"
        +                },
        +                "caveats": {
        +                  "items": {
        +                    "type": "string"
        +                  },
        +                  "type": "array"
        +                },
        +                "data": {
        +                  "additionalProperties": true,
        +                  "properties": {},
        +                  "type": "object"
        +                }
        +              },
        +              "required": [
        +                "available",
        +                "data"
        +              ],
        +              "type": "object"
        +            },
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "available": {
        +                  "const": false,
        +                  "type": "boolean"
        +                },
        +                "reason": {
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "available",
        +                "reason"
        +              ],
        +              "type": "object"
        +            }
        +          ],
        +          "description": "Unavailable is unknown, not zero. Read reason before interpreting the metric."
        +        },
        +        "aeo": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "available": {
        +                  "const": true,
        +                  "type": "boolean"
        +                },
        +                "caveats": {
        +                  "items": {
        +                    "type": "string"
        +                  },
        +                  "type": "array"
        +                },
        +                "data": {
        +                  "additionalProperties": true,
        +                  "properties": {},
        +                  "type": "object"
        +                }
        +              },
        +              "required": [
        +                "available",
        +                "data"
        +              ],
        +              "type": "object"
        +            },
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "available": {
        +                  "const": false,
        +                  "type": "boolean"
        +                },
        +                "reason": {
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "available",
        +                "reason"
        +              ],
        +              "type": "object"
        +            }
        +          ],
        +          "description": "Unavailable is unknown, not zero. Read reason before interpreting the metric."
        +        },
        +        "baseline": {
        +          "additionalProperties": false,
        +          "description": "Equal-length comparison window immediately before it.",
        +          "properties": {
        +            "from": {
        +              "description": "Unix epoch milliseconds.",
        +              "type": "number"
        +            },
        +            "to": {
        +              "description": "Unix epoch milliseconds.",
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "from",
        +            "to"
        +          ],
        +          "type": "object"
        +        },
        +        "email": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "available": {
        +                  "const": true,
        +                  "type": "boolean"
        +                },
        +                "caveats": {
        +                  "items": {
        +                    "type": "string"
        +                  },
        +                  "type": "array"
        +                },
        +                "data": {
        +                  "additionalProperties": true,
        +                  "properties": {},
        +                  "type": "object"
        +                }
        +              },
        +              "required": [
        +                "available",
        +                "data"
        +              ],
        +              "type": "object"
        +            },
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "available": {
        +                  "const": false,
        +                  "type": "boolean"
        +                },
        +                "reason": {
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "available",
        +                "reason"
        +              ],
        +              "type": "object"
        +            }
        +          ],
        +          "description": "Unavailable is unknown, not zero. Read reason before interpreting the metric."
        +        },
        +        "harness": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "available": {
        +                  "const": true,
        +                  "type": "boolean"
        +                },
        +                "caveats": {
        +                  "items": {
        +                    "type": "string"
        +                  },
        +                  "type": "array"
        +                },
        +                "data": {
        +                  "additionalProperties": true,
        +                  "properties": {},
        +                  "type": "object"
        +                }
        +              },
        +              "required": [
        +                "available",
        +                "data"
        +              ],
        +              "type": "object"
        +            },
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "available": {
        +                  "const": false,
        +                  "type": "boolean"
        +                },
        +                "reason": {
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "available",
        +                "reason"
        +              ],
        +              "type": "object"
        +            }
        +          ],
        +          "description": "Unavailable is unknown, not zero. Read reason before interpreting the metric."
        +        },
        +        "linkedin": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "available": {
        +                  "const": true,
        +                  "type": "boolean"
        +                },
        +                "caveats": {
        +                  "items": {
        +                    "type": "string"
        +                  },
        +                  "type": "array"
        +                },
        +                "data": {
        +                  "additionalProperties": true,
        +                  "properties": {},
        +                  "type": "object"
        +                }
        +              },
        +              "required": [
        +                "available",
        +                "data"
        +              ],
        +              "type": "object"
        +            },
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "available": {
        +                  "const": false,
        +                  "type": "boolean"
        +                },
        +                "reason": {
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "available",
        +                "reason"
        +              ],
        +              "type": "object"
        +            }
        +          ],
        +          "description": "Unavailable is unknown, not zero. Read reason before interpreting the metric."
        +        },
        +        "outbound": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "available": {
        +                  "const": true,
        +                  "type": "boolean"
        +                },
        +                "caveats": {
        +                  "items": {
        +                    "type": "string"
        +                  },
        +                  "type": "array"
        +                },
        +                "data": {
        +                  "additionalProperties": true,
        +                  "properties": {},
        +                  "type": "object"
        +                }
        +              },
        +              "required": [
        +                "available",
        +                "data"
        +              ],
        +              "type": "object"
        +            },
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "available": {
        +                  "const": false,
        +                  "type": "boolean"
        +                },
        +                "reason": {
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "available",
        +                "reason"
        +              ],
        +              "type": "object"
        +            }
        +          ],
        +          "description": "Unavailable is unknown, not zero. Read reason before interpreting the metric."
        +        },
        +        "reason": {
        +          "type": "string"
        +        },
        +        "seo": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "available": {
        +                  "const": true,
        +                  "type": "boolean"
        +                },
        +                "caveats": {
        +                  "items": {
        +                    "type": "string"
        +                  },
        +                  "type": "array"
        +                },
        +                "data": {
        +                  "additionalProperties": true,
        +                  "properties": {},
        +                  "type": "object"
        +                }
        +              },
        +              "required": [
        +                "available",
        +                "data"
        +              ],
        +              "type": "object"
        +            },
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "available": {
        +                  "const": false,
        +                  "type": "boolean"
        +                },
        +                "reason": {
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "available",
        +                "reason"
        +              ],
        +              "type": "object"
        +            }
        +          ],
        +          "description": "Unavailable is unknown, not zero. Read reason before interpreting the metric."
        +        },
        +        "skip": {
        +          "description": "True when this account is excluded from reporting.",
        +          "type": "boolean"
        +        },
        +        "social": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "available": {
        +                  "const": true,
        +                  "type": "boolean"
        +                },
        +                "caveats": {
        +                  "items": {
        +                    "type": "string"
        +                  },
        +                  "type": "array"
        +                },
        +                "data": {
        +                  "additionalProperties": true,
        +                  "properties": {},
        +                  "type": "object"
        +                }
        +              },
        +              "required": [
        +                "available",
        +                "data"
        +              ],
        +              "type": "object"
        +            },
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "available": {
        +                  "const": false,
        +                  "type": "boolean"
        +                },
        +                "reason": {
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "available",
        +                "reason"
        +              ],
        +              "type": "object"
        +            }
        +          ],
        +          "description": "Unavailable is unknown, not zero. Read reason before interpreting the metric."
        +        },
        +        "window": {
        +          "additionalProperties": false,
        +          "description": "Actual reporting window after clamping.",
        +          "properties": {
        +            "from": {
        +              "description": "Unix epoch milliseconds.",
        +              "type": "number"
        +            },
        +            "to": {
        +              "description": "Unix epoch milliseconds.",
        +              "type": "number"
        +            }
        +          },
        +          "required": [
        +            "from",
        +            "to"
        +          ],
        +          "type": "object"
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "results"
        +  ],
        +  "type": "object"
        +}
    • Changedreview_get2 fields changed
      • addedInput schema / properties / id / description
        Added value: +"Review card ID returned by review_list or review_get."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "item": {
        +      "additionalProperties": true,
        +      "description": "The requested review card.",
        +      "properties": {
        +        "actions": {
        +          "description": "The exact action verbs this card accepts.",
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "createdAt": {
        +          "description": "Unix epoch milliseconds.",
        +          "type": "number"
        +        },
        +        "detail": {
        +          "description": "Additional context, when available.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "id": {
        +          "description": "Review card ID for review_get and review actions.",
        +          "type": "string"
        +        },
        +        "kind": {
        +          "description": "Card kind, such as approval, question or update.",
        +          "type": "string"
        +        },
        +        "options": {
        +          "anyOf": [
        +            {
        +              "items": {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "label": {
        +                    "type": "string"
        +                  },
        +                  "value": {
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "label",
        +                  "value"
        +                ],
        +                "type": "object"
        +              },
        +              "type": "array"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Choices accepted by review_answer with action choose."
        +        },
        +        "payload": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": true,
        +              "properties": {},
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Source-specific draft, evidence or decision data."
        +        },
        +        "primaryLabel": {
        +          "description": "Label of the dashboard's primary action.",
        +          "type": "string"
        +        },
        +        "prompt": {
        +          "description": "The question or approval request.",
        +          "type": "string"
        +        },
        +        "sourceType": {
        +          "description": "The work that produced this card, when available.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "status": {
        +          "description": "Current review state, including pending or needs_revision.",
        +          "type": "string"
        +        },
        +        "summary": {
        +          "description": "Short summary, when available.",
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "title": {
        +          "description": "Short title of the proposed work or decision.",
        +          "type": "string"
        +        },
        +        "updatedAt": {
        +          "description": "Unix epoch milliseconds.",
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "id",
        +        "kind",
        +        "sourceType",
        +        "status",
        +        "title",
        +        "actions",
        +        "primaryLabel"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "item"
        +  ],
        +  "type": "object"
        +}
    • Changedreview_list2 fields changed
      • addedInput schema / properties / limit / description
        Added value: +"Maximum open cards to return; default 50, range 1-100. Includes pending and revising cards in one call."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "items": {
        +      "description": "Open review cards, including revisions.",
        +      "items": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "actions": {
        +            "description": "The exact action verbs this card accepts.",
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          "createdAt": {
        +            "description": "Unix epoch milliseconds.",
        +            "type": "number"
        +          },
        +          "detail": {
        +            "description": "Additional context, when available.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "id": {
        +            "description": "Review card ID for review_get and review actions.",
        +            "type": "string"
        +          },
        +          "kind": {
        +            "description": "Card kind, such as approval, question or update.",
        +            "type": "string"
        +          },
        +          "options": {
        +            "anyOf": [
        +              {
        +                "items": {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "label": {
        +                      "type": "string"
        +                    },
        +                    "value": {
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "label",
        +                    "value"
        +                  ],
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Choices accepted by review_answer with action choose."
        +          },
        +          "payload": {
        +            "anyOf": [
        +              {
        +                "additionalProperties": true,
        +                "properties": {},
        +                "type": "object"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Source-specific draft, evidence or decision data."
        +          },
        +          "primaryLabel": {
        +            "description": "Label of the dashboard's primary action.",
        +            "type": "string"
        +          },
        +          "prompt": {
        +            "description": "The question or approval request.",
        +            "type": "string"
        +          },
        +          "sourceType": {
        +            "description": "The work that produced this card, when available.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "status": {
        +            "description": "Current review state, including pending or needs_revision.",
        +            "type": "string"
        +          },
        +          "summary": {
        +            "description": "Short summary, when available.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "title": {
        +            "description": "Short title of the proposed work or decision.",
        +            "type": "string"
        +          },
        +          "updatedAt": {
        +            "description": "Unix epoch milliseconds.",
        +            "type": "number"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "kind",
        +          "sourceType",
        +          "status",
        +          "title",
        +          "actions",
        +          "primaryLabel"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "items"
        +  ],
        +  "type": "object"
        +}
    • Changedwhoami1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "me": {
        +      "additionalProperties": false,
        +      "description": "Connected business, token permissions and rate limits.",
        +      "properties": {
        +        "account": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "id": {
        +              "type": "string"
        +            },
        +            "name": {
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            }
        +          },
        +          "required": [
        +            "id",
        +            "name"
        +          ],
        +          "type": "object"
        +        },
        +        "createdAt": {
        +          "description": "Unix epoch milliseconds.",
        +          "type": "number"
        +        },
        +        "inSetup": {
        +          "type": "boolean"
        +        },
        +        "label": {
        +          "type": "string"
        +        },
        +        "lastUsedAt": {
        +          "description": "Unix epoch milliseconds.",
        +          "type": [
        +            "number",
        +            "null"
        +          ]
        +        },
        +        "limits": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "account": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "burst": {
        +                  "type": "number"
        +                },
        +                "perMinute": {
        +                  "type": "number"
        +                }
        +              },
        +              "required": [
        +                "perMinute",
        +                "burst"
        +              ],
        +              "type": "object"
        +            },
        +            "messages": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "burst": {
        +                  "type": "number"
        +                },
        +                "perMinute": {
        +                  "type": "number"
        +                }
        +              },
        +              "required": [
        +                "perMinute",
        +                "burst"
        +              ],
        +              "type": "object"
        +            },
        +            "reads": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "burst": {
        +                  "type": "number"
        +                },
        +                "perMinute": {
        +                  "type": "number"
        +                }
        +              },
        +              "required": [
        +                "perMinute",
        +                "burst"
        +              ],
        +              "type": "object"
        +            },
        +            "writes": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "burst": {
        +                  "type": "number"
        +                },
        +                "perMinute": {
        +                  "type": "number"
        +                }
        +              },
        +              "required": [
        +                "perMinute",
        +                "burst"
        +              ],
        +              "type": "object"
        +            }
        +          },
        +          "required": [
        +            "reads",
        +            "writes",
        +            "messages",
        +            "account"
        +          ],
        +          "type": "object"
        +        },
        +        "scopes": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "tokenId": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "tokenId",
        +        "label",
        +        "scopes",
        +        "createdAt",
        +        "lastUsedAt",
        +        "account",
        +        "limits"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "me"
        +  ],
        +  "type": "object"
        +}
    • Changedworkflow_runs3 fields changed
      • addedInput schema / properties / id / description
        Added value: +"workflowId returned by workflows_list or a workflow write."
      • addedInput schema / properties / limit / description
        Added value: +"Maximum recent runs; default 10. The API caps at 50 even when a larger value is supplied."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "runs": {
        +      "description": "Newest runs first.",
        +      "items": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "error": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "finishedAt": {
        +            "description": "Unix epoch milliseconds.",
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "found": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "contacts": {
        +                "type": "number"
        +              },
        +              "leads": {
        +                "type": "number"
        +              }
        +            },
        +            "required": [
        +              "leads",
        +              "contacts"
        +            ],
        +            "type": "object"
        +          },
        +          "headline": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "id": {
        +            "description": "Run ID for leads_list.workflowRunId.",
        +            "type": "string"
        +          },
        +          "startedAt": {
        +            "description": "Unix epoch milliseconds.",
        +            "type": "number"
        +          },
        +          "status": {
        +            "description": "Run state, such as queued, running, done, failed or abandoned.",
        +            "type": "string"
        +          },
        +          "stepResults": {
        +            "description": "Per-step outcomes and linked review cards.",
        +            "items": {
        +              "additionalProperties": true,
        +              "properties": {},
        +              "type": "object"
        +            },
        +            "type": "array"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "status"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "runs"
        +  ],
        +  "type": "object"
        +}
    • Changedworkflows_list1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "workflows": {
        +      "items": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "description": {
        +            "type": "string"
        +          },
        +          "name": {
        +            "description": "Workflow name.",
        +            "type": "string"
        +          },
        +          "nextRunAt": {
        +            "description": "Unix epoch milliseconds.",
        +            "type": [
        +              "number",
        +              "null"
        +            ]
        +          },
        +          "scheduleEcho": {
        +            "description": "The interpreted schedule.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "scheduleError": {
        +            "description": "Why the schedule could not be interpreted.",
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "scheduleText": {
        +            "description": "The requested recurring schedule.",
        +            "type": "string"
        +          },
        +          "status": {
        +            "description": "Current lifecycle state, including live or paused.",
        +            "type": "string"
        +          },
        +          "steps": {
        +            "description": "Complete step list; preserve unchanged steps when replacing it.",
        +            "items": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "details": {
        +                  "items": {
        +                    "type": "string"
        +                  },
        +                  "type": "array"
        +                },
        +                "gate": {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "label": {
        +                      "type": "string"
        +                    },
        +                    "on": {
        +                      "type": "boolean"
        +                    }
        +                  },
        +                  "required": [
        +                    "on"
        +                  ],
        +                  "type": "object"
        +                },
        +                "id": {
        +                  "type": "string"
        +                },
        +                "title": {
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "id",
        +                "title",
        +                "details"
        +              ],
        +              "type": "object"
        +            },
        +            "type": "array"
        +          },
        +          "workflowId": {
        +            "description": "Workflow ID for updates, run history and run-now calls.",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "workflowId",
        +          "name",
        +          "status",
        +          "scheduleText",
        +          "steps"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "workflows"
        +  ],
        +  "type": "object"
        +}
  7. 1 tool update
    • Changedleads_list1 field changed
      • addedInput schema / properties / workflowRunId
        Added value: +{
        +  "type": "string"
        +}
  8. 1 tool update
    • Addedlinkedin_person
  9. 10 tool updates
    • First observedagent_status
    • First observedblocklist_list
    • First observedlead_get
    • First observedleads_list
    • First observedresults_get
    • First observedreview_get
    • First observedreview_list
    • First observedwhoami
    • First observedworkflow_runs
    • First observedworkflows_list

Publisher details

Operator
Revnu (IT5 Inc.) · Publisher source
Vendor relationship
First-party · Publisher source
Trust center
Not available
Restrictions
Requires a Revnu account and OAuth authorization. Choose permissions at sign-in; access is limited to that account. Write tools require the corresponding permission. Access can be revoked in Revnu Settings → API Tokens. · Publisher source

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Connects a user's existing LinkedIn, WhatsApp, Instagram, Telegram, email and calendar accounts to any MCP-compatible agent so it can search, read and act on them without browser automation, including outreach, messaging, inbox triage and event management. It provides 170+ intent-named tools with OAuth 2.1 authentication, per-provider pacing, and approval prompts before sends, posts or deletions.
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Connects any MCP-capable AI assistant—ChatGPT, Claude, Gemini, Cursor and others—to an AI-native CRM via OAuth, so users can manage contacts, deals, pipelines, reports and add-ons by chat, with every action scoped to the connecting user's role. The server itself never calls an AI model or holds API keys, leaving all intelligence to the assistant you bring.
    4 npm
    AGPL 3.0
  • F
    license
    Not graded
    quality
    C
    maintenance
    Provides 40 MCP tools to connect AI assistants like Claude to marketing platforms (Google Ads, Meta Ads, GA4, Search Console, Stripe) for reading, analyzing, managing, and monitoring ad campaigns and analytics through natural language.
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    Hosted MCP server that gives AI agents read and write access to your full marketing & ecommerce stack — Google Analytics, Search Console, Google & Meta Ads, Shopify, WooCommerce, Shopware, Slack and LinkedIn. 100+ tools across 10 connectors. BYOK, OAuth 2.1.
    -
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources