# Andru (remote · mcp.andru-ai.com)

Revenue intelligence for complex B2B growth.

- Trust score: 84/100 (high trust)
- Change this week: +3
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- remote · `mcp.andru-ai.com`: 84/100 (this document), [markdown](https://verifymcp.io/servers/geter-andru-andru-intelligence/mcp.md), [page](https://verifymcp.io/servers/geter-andru-andru-intelligence/mcp)
- remote · `mcp-server-andru-intelligence.onrender.com`: 80/100, [markdown](https://verifymcp.io/servers/geter-andru-andru-intelligence/mcp-server-andru-intelligence-2.md), [page](https://verifymcp.io/servers/geter-andru-andru-intelligence/mcp-server-andru-intelligence-2)
- npm · `mcp-server-andru-intelligence`: 74/100, [markdown](https://verifymcp.io/servers/geter-andru-andru-intelligence/mcp-server-andru-intelligence.md), [page](https://verifymcp.io/servers/geter-andru-andru-intelligence/mcp-server-andru-intelligence)

## Channel facts

- Endpoint: `https://mcp.andru-ai.com/mcp`
- Transports: `streamable-http`
- Auth: `required`
- Version: `2.0.2`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-05.

- **Endpoint Security**: 95/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token.
  - HTTPS is enforced; there's no plaintext access path.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC is configured correctly; the domain's records validate against the full chain to the root.
  - The authorisation server supports Client ID Metadata Documents, the current MCP client-registration mechanism.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 76/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 8633 tokens (~233/item across 37 items; 36 tools + 1 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 34/100
  - Stability check failed: schema churn in the 12 days we've observed: 2 tool removals, 0 breaking changes, 0 auth/transport breaks, 2 additions.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 36 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 38 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### How do I install the Andru MCP server?

Andru is a hosted endpoint at https://mcp.andru-ai.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http geter-andru-andru-intelligence 'https://mcp.andru-ai.com/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "geter-andru-andru-intelligence": {
      "url": "https://mcp.andru-ai.com/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "geter-andru-andru-intelligence": {
      "type": "http",
      "url": "https://mcp.andru-ai.com/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.geter-andru-andru-intelligence]
url = "https://mcp.andru-ai.com/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "geter-andru-andru-intelligence": {
      "type": "remote",
      "url": "https://mcp.andru-ai.com/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add geter-andru-andru-intelligence --url 'https://mcp.andru-ai.com/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  geter-andru-andru-intelligence:
    url: "https://mcp.andru-ai.com/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "geter-andru-andru-intelligence": {
      "Transport": "http",
      "Url": "https://mcp.andru-ai.com/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add geter-andru-andru-intelligence -t streamable-http -u 'https://mcp.andru-ai.com/mcp'
```

### Other

```json
{
  "mcpServers": {
    "geter-andru-andru-intelligence": {
      "type": "http",
      "url": "https://mcp.andru-ai.com/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-03 (score 84, +1)

No change was recorded against any check on this day. Stability & Change Management went from 24 to 28.

### 2026-11-01 (score 83, +1)

No change was recorded against any check on this day. Stability & Change Management went from 18 to 21.

### 2026-10-30 (score 82, +1)

No change was recorded against any check on this day. Stability & Change Management went from 11 to 14.

### 2026-10-28 (score 81, +1)

- [security] The server rewrote its instructions, which are the text every model session reads
- [security] Tool “generate_portfolio_brief” rewrote its description, which is the text the model reads
- [security] Tool “consult_agent” rewrote its description, which is the text the model reads
- [security] Tool “assess_company_readiness” rewrote its description, which is the text the model reads
- [security] Tool “get_founder_context” rewrote its description, which is the text the model reads
- [security] Tool “get_icp_profile” rewrote its description, which is the text the model reads
- [security] Tool “get_portfolio_readiness_rollup” rewrote its description, which is the text the model reads
- [security] Tool “get_revenue_memory” rewrote its description, which is the text the model reads
- [security] Tool “get_sales_blueprint” rewrote its description, which is the text the model reads
- [security] Tool “get_thesis_match” rewrote its description, which is the text the model reads
- [security] Tool “list_assets” rewrote its description, which is the text the model reads
- [security] Tool “log_revenue_insight” rewrote its description, which is the text the model reads
- [security] Tool “quote” rewrote its description, which is the text the model reads
- [security] Tool “simulate_buyer_persona” rewrote its description, which is the text the model reads
- [security] Tool “whoami” rewrote its description, which is the text the model reads
- [security] Tool “discover_prospects” rewrote its description, which is the text the model reads
- [security] Tool “get_asset” rewrote its description, which is the text the model reads
- [security] Tool “get_account_plan” rewrote its description, which is the text the model reads
- [functional] Server version: 2.0.2 → 2.0.8
- [functional] New tool “list_my_assets”
- [cosmetic] “get_asset” added an optional parameter “asset_id”
- [cosmetic] “get_account_plan” reworded the description of “refresh”
- [cosmetic] “simulate_buyer_persona” reworded the description of “mode”
- [cosmetic] “get_asset” made “job_id” optional
- [cosmetic] Tool “get_revenue_memory” changed its title: Search revenue memory → Search what Andru remembers
- [cosmetic] Tool “log_revenue_insight” changed its title: Save a revenue insight → Save what a deal taught
- [cosmetic] Tool “generate_portfolio_brief” changed its title: Brief on portfolio go-to-market → Brief on portfolio sales activity

### 2026-10-27 (score 80, 0)

- [security] The server rewrote its instructions, which are the text every model session reads
- [security] New tool “cancel_job”, which the server declares destructive
- [security] Tool “set_product_context” is now declared destructive
- [functional] Server version: 2.0.1 → 2.0.2
- [functional] Server version: 2.0.0 → 2.0.1

### 2026-10-26 (score 80, 0)

- [functional] Server version: 1.10.9 → 2.0.0

### 2026-10-25 (score 80, 0)

- [security regression] Stability: unverified → fail
- [security regression] A breaking change shipped without a version bump: still 1.10.9
- [security regression] Tool “get_capability_profile” was removed
- [security regression] Tool “get_founder_wellness” was removed
- [security] Tool “get_revenue_memory” rewrote its description, which is the text the model reads
- [security] Tool “get_sales_blueprint” rewrote its description, which is the text the model reads
- [security] Tool “get_thesis_match” rewrote its description, which is the text the model reads
- [security] Tool “list_assets” rewrote its description, which is the text the model reads
- [security] Tool “log_revenue_insight” rewrote its description, which is the text the model reads
- [security] Tool “preview_company” rewrote its description, which is the text the model reads
- [security] Tool “quote” rewrote its description, which is the text the model reads
- [security] Tool “set_product_context” rewrote its description, which is the text the model reads
- [security] Tool “signup_start” rewrote its description, which is the text the model reads
- [security] Tool “signup_status” rewrote its description, which is the text the model reads
- [security] Tool “signup_verify” rewrote its description, which is the text the model reads
- [security] Tool “simulate_buyer_persona” rewrote its description, which is the text the model reads
- [security] Tool “whoami” rewrote its description, which is the text the model reads
- [security] Tool “get_pre_brief” rewrote its description, which is the text the model reads
- [security] Tool “get_portfolio_readiness_rollup” rewrote its description, which is the text the model reads
- [security] Tool “get_persona_profile” rewrote its description, which is the text the model reads
- [security] Tool “get_messaging_framework” rewrote its description, which is the text the model reads
- [security] Tool “get_memory_history” rewrote its description, which is the text the model reads
- [security] Tool “get_market_signals” rewrote its description, which is the text the model reads
- [security] Tool “get_disqualification_signals” rewrote its description, which is the text the model reads
- [security] Tool “get_competitive_positioning” rewrote its description, which is the text the model reads
- [security] Tool “get_asset” rewrote its description, which is the text the model reads
- [security] Tool “get_account_plan” rewrote its description, which is the text the model reads
- [security] Tool “generate_portfolio_brief” rewrote its description, which is the text the model reads
- [security] Tool “generate_asset” rewrote its description, which is the text the model reads
- [security] Tool “discover_prospects” rewrote its description, which is the text the model reads
- [security] Tool “consult_agent” rewrote its description, which is the text the model reads
- [security] Tool “classify_opportunity” rewrote its description, which is the text the model reads
- [security] Tool “batch_fit_score” rewrote its description, which is the text the model reads
- [security] Tool “assess_company_readiness” rewrote its description, which is the text the model reads
- [security] Tool “get_icp_profile” rewrote its description, which is the text the model reads
- [security] Tool “get_icp_fit_score” rewrote its description, which is the text the model reads
- [security] Tool “get_founder_context” rewrote its description, which is the text the model reads
- [security] Tool “get_evaluation_criteria” rewrote its description, which is the text the model reads
- [functional regression] Schema quality: 211 → 240
- [functional regression] Resource “ICP Profile” was removed
- [functional regression] Resource “Pipeline Runs” was removed
- [cosmetic] “get_pre_brief” added an optional parameter “meeting”
- [cosmetic] “get_pre_brief” added an optional parameter “meetingId”
- [cosmetic] “get_pre_brief” added an optional parameter “room”
- [cosmetic] “get_pre_brief” added an optional parameter “situation”
- [cosmetic] “get_pre_brief” added an optional parameter “stage”
- [cosmetic] “get_competitive_positioning” reworded the description of “competitorName”
- [cosmetic] “get_competitive_positioning” reworded the description of “competitorFeatures”
- [cosmetic] “get_account_plan” reworded the description of “accountName”
- [cosmetic] “get_pre_brief” reworded the description of “companyName”
- [cosmetic] “get_pre_brief” dropped the optional parameter “briefType”
- [cosmetic] “get_pre_brief” dropped the optional parameter “contactName”
- [cosmetic] “get_pre_brief” dropped the optional parameter “dealId”
- [cosmetic] “get_pre_brief” dropped the optional parameter “eventId”
- [cosmetic] “get_pre_brief” dropped the optional parameter “idempotencyKey”
- [cosmetic] “get_pre_brief” dropped the optional parameter “maxAmountCents”
- [cosmetic] “get_pre_brief” dropped the optional parameter “quoteId”
- [cosmetic] “get_messaging_framework” dropped the optional parameter “mbtiCategory”
- [cosmetic] “get_icp_profile” dropped the optional parameter “layers”
- [cosmetic] “get_icp_profile” dropped the optional parameter “includeSevenAnswers”
- [cosmetic] “get_icp_profile” dropped the optional parameter “includeAntiPatterns”
- [cosmetic] Tool “get_messaging_framework” changed its title: Messaging for each buyer → Put your story in each buyer's terms
- [cosmetic] Tool “get_competitive_positioning” changed its title: Compare with a competitor → Weigh the buyer's alternatives
- [cosmetic] Tool “get_disqualification_signals” changed its title: Check a deal for red flags → Check whether a buyer is ready

### 2026-10-24 (score 80)

First indexed and scored.

## MCP tools (36)

### `preview_company` (~146 tokens)

Preview a company

Before any outreach: use this when the person wants to see how a company's website reads to the buyers it wants, before they have an Andru account. Returns who the company sells to, the buyers who decide, and what the site says versus what those buyers need to hear. Send the website. No account needed. Takes about a minute: you get a preview_id; call again with it to collect the read. If the person signs up with signup_start and this preview_id, the read becomes their first ICP.

Input parameters:

- `previewId` (string): From an earlier call, to collect the read.
- `website` (string): The company's website, e.g. acme.com.

### `signup_start` (~244 tokens)

Start sign-up

Getting set up: use this when the person asks to sign up for or sign in to Andru from here. Send their email. Andru emails them a 6-digit code and an Approve button. If they read you the code, call signup_verify. If they tap Approve, call signup_status with the request_id until it returns your key. They also choose how much you can spend without asking them; it starts at nothing beyond the daily free calls.

Input parameters:

- `agentName` (string): Optional: your agent's name. The key is named after it.
- `email` (string, required): The person's email. The code goes here.
- `foundVia` (string): Optional: how the person or their agent found Andru: moltbook, a2a_directory, mcp_registry (includes Smithery), npm, search, ai_assistant, person or other. Other text is kept as written.
- `previewId` (string): Optional: from preview_company. The read becomes their first ICP.
- `website` (string): Optional: their company website, e.g. acme.com. Andru reads it so its answers are about what they sell.

### `signup_verify` (~152 tokens)

Finish sign-up with a code

Getting set up: use this after signup_start when the person reads you the 6-digit code from their email. Send the email and the code. Returns an Andru API key for this agent.

Input parameters:

- `agentName` (string): Optional: your agent's name. The key is named after it.
- `code` (string, required): The 6-digit code from the email.
- `email` (string, required): The email the code was sent to.
- `foundVia` (string): Optional: how the person or their agent found Andru: moltbook, a2a_directory, mcp_registry (includes Smithery), npm, search, ai_assistant, person or other. Other text is kept as written.

### `signup_status` (~86 tokens)

Check sign-up approval

Getting set up: use this after signup_start when the person approves by tapping the button in their email instead of reading you a code. Send the request_id. Returns "waiting" (ask again after the number of seconds it gives), your API key once they approve (shown once; save it), or "expired".

Input parameters:

- `requestId` (string, required): The request_id from signup_start.

### `whoami` (~72 tokens)

Show this key's account and limits

Use this when the person asks what this key or connection can spend, or how much is left. Returns the account, the key's name, how much it can spend today and this month without asking, the wallet balance, and free calls left today, and the portfolios this account can see, each with its id.

### `quote` (~113 tokens)

Get the price of a call

Use this when the person asks what a call would cost. Send the tool name and its arguments. Returns the price, whether today's free calls cover it, the wallet balance, how much this key can still spend without asking, and a quote_id that holds the price for 30 minutes. Pass quote_id with the call to pay the quoted price.

Input parameters:

- `arguments` (object): The arguments you plan to send with it.
- `tool` (string, required): The tool you plan to call, e.g. get_pre_brief.

### `get_icp_fit_score` (~382 tokens)

Score a company's fit

Use this when the person asks whether one company is a good fit, before they reach out or spend more time. Scores it in seconds against the account's ICP on 5 dimensions (company profile, tech stack, pain, budget fit, buying signals) and returns an A–D tier with the reason behind each score. For many companies at once, use batch_fit_score.

Input parameters:

- `companyName` (string): Company name to evaluate
- `domain` (string): Company website domain
- `employeeCount` (number): Number of employees
- `geography` (string): HQ location
- `industry` (string): Industry vertical
- `painPoints` (array): Known pain points or challenges they face
- `productDescription` (string): A brief description of what the user's product does and who it's for. Infer this from the conversation if the user has already described their product. If the user hasn't mentioned their product yet,…
- `revenue` (string): Revenue range (e.g., "$1M-$5M")
- `targetRole` (string): The buyer role being evaluated (e.g., "CFO", "CTO", "VP Sales"). Infer from context — often explicit in the user's question. If not mentioned, default to the most senior relevant role for their verti…
- `techStack` (array): Technologies the company uses
- `triggerEvents` (array): Recent trigger events (e.g., "just raised Series B", "new CTO hired")
- `vertical` (string): The industry the user sells into (e.g., "fintech", "healthcare", "defense"). Infer from conversation context — the user's product description, company name, or the companies they're asking about. If…

### `get_persona_profile` (~332 tokens)

Profile a buyer

Use this when the person asks what a specific buyer role cares about (a CFO, a VP of Operations) or why that person isn't responding. Returns Andru's starting picture of that buyer from the account's ICP: what they're measured on, what worries them, the concerns they need answered before they say yes, and what they need to hear. Treat it as something to confirm with the real person, not a conclusion. To prepare for one specific meeting, use get_pre_brief.

Input parameters:

- `companySize` (string): Their company size range
- `industry` (string): Their industry
- `productDescription` (string): A brief description of what the user's product does and who it's for. Infer this from the conversation if the user has already described their product. If the user hasn't mentioned their product yet,…
- `targetRole` (string): The buyer role being evaluated (e.g., "CFO", "CTO", "VP Sales"). Infer from context — often explicit in the user's question. If not mentioned, default to the most senior relevant role for their verti…
- `title` (string, required): Job title of the person you're meeting (e.g., "VP Engineering", "CTO", "Head of Sales")
- `vertical` (string): The industry the user sells into (e.g., "fintech", "healthcare", "defense"). Infer from conversation context — the user's product description, company name, or the companies they're asking about. If…

### `get_disqualification_signals` (~324 tokens)

Check whether a buyer is ready

Use this when a deal has stalled or the person wonders whether this buyer is ready for them. Checks the company against the account's ICP and the profile of companies that aren't a fit, and returns one of four fit levels with the reasons. When the answer is no, help the person tell the buyer kindly who fits them better today.

Input parameters:

- `companyName` (string): Company name to check
- `dealContext` (object): Current deal context (if applicable)
- `employeeCount` (number): Number of employees
- `geography` (string): Location
- `industry` (string): Industry
- `productDescription` (string): A brief description of what the user's product does and who it's for. Infer this from the conversation if the user has already described their product. If the user hasn't mentioned their product yet,…
- `revenue` (string): Revenue range
- `targetRole` (string): The buyer role being evaluated (e.g., "CFO", "CTO", "VP Sales"). Infer from context — often explicit in the user's question. If not mentioned, default to the most senior relevant role for their verti…
- `techStack` (array): Technologies they use
- `vertical` (string): The industry the user sells into (e.g., "fintech", "healthcare", "defense"). Infer from conversation context — the user's product description, company name, or the companies they're asking about. If…

### `get_messaging_framework` (~335 tokens)

Put your story in each buyer's terms

Use this when the person needs to put their story in one buyer's terms: a first note to an executive about what they could change, or the same point for the CFO and the IT lead. Returns what that buyer responds to, the problem in their words, and the concerns they need answered, for a channel and funnel stage. Built from the account's ICP. To learn who the buyer is, use get_persona_profile; to prepare for one specific meeting, use get_pre_brief.

Input parameters:

- `channel` (string): Channel (email, linkedin, phone, etc.)
- `personaType` (string): Target buyer title
- `productDescription` (string): A brief description of what the user's product does and who it's for. Infer this from the conversation if the user has already described their product. If the user hasn't mentioned their product yet,…
- `segment` (string): Target segment or vertical
- `stage` (string): Where the buyer is in their journey
- `targetRole` (string): The buyer role being evaluated (e.g., "CFO", "CTO", "VP Sales"). Infer from context — often explicit in the user's question. If not mentioned, default to the most senior relevant role for their verti…
- `vertical` (string): The industry the user sells into (e.g., "fintech", "healthcare", "defense"). Infer from conversation context — the user's product description, company name, or the companies they're asking about. If…

### `get_competitive_positioning` (~306 tokens)

Weigh the buyer's alternatives

Use this when a buyer is weighing another option, or the person asks how they compare with a named alternative. Treats it as diligence for the buyer: where the alternative fits this buyer better, where the person's product does, and questions that help the buyer decide for themselves. Grounded in the account's ICP.

Input parameters:

- `competitorFeatures` (array): What that alternative offers, as you know it.
- `competitorName` (string, required): The alternative the buyer is weighing (a product or company).
- `context` (string): Additional context (e.g., "enterprise deal", "competing on price")
- `productDescription` (string): A brief description of what the user's product does and who it's for. Infer this from the conversation if the user has already described their product. If the user hasn't mentioned their product yet,…
- `targetRole` (string): The buyer role being evaluated (e.g., "CFO", "CTO", "VP Sales"). Infer from context — often explicit in the user's question. If not mentioned, default to the most senior relevant role for their verti…
- `vertical` (string): The industry the user sells into (e.g., "fintech", "healthcare", "defense"). Infer from conversation context — the user's product description, company name, or the companies they're asking about. If…

### `classify_opportunity` (~410 tokens)

Read a deal

Use this after a first conversation, when the person wants one read on whether this buyer is ready: fit score, how well the people involved match the buyers in their ICP, risk flags and a fit check, ending in one call: pursue, proceed with caution, deprioritize, or not a fit today. It doesn't confirm a champion; that takes asking the person. For a quick fit score only, use get_icp_fit_score.

Input parameters:

- `championIdentified` (boolean): Has a champion been identified?
- `companyName` (string, required): Company name
- `competitorInvolved` (string): Known competitor in the deal
- `contactTitle` (string): Primary contact job title
- `dealStage` (string): Current deal stage
- `dealValue` (number): Estimated deal value
- `employeeCount` (number): Number of employees
- `geography` (string): Location
- `industry` (string): Industry
- `painPoints` (array): Known pain points
- `productDescription` (string): A brief description of what the user's product does and who it's for. Infer this from the conversation if the user has already described their product. If the user hasn't mentioned their product yet,…
- `revenue` (string): Revenue range
- `targetRole` (string): The buyer role being evaluated (e.g., "CFO", "CTO", "VP Sales"). Infer from context — often explicit in the user's question. If not mentioned, default to the most senior relevant role for their verti…
- `techStack` (array): Technologies used
- `triggerEvents` (array): Trigger events
- `vertical` (string): The industry the user sells into (e.g., "fintech", "healthcare", "defense"). Infer from conversation context — the user's product description, company name, or the companies they're asking about. If…

### `get_account_plan` (~286 tokens)

Build an account plan

Use this when the person wants a plan for a specific target account. Builds a first map of the buying committee, the opportunities that fit what they sell, the likely champion, what each person needs to hear, and next steps, from sourced research, saved to their Andru account. Treat the committee and champion as a map to confirm with each person. Returns the plan's link with a short summary. A plan for the same company from the last 30 days comes back at once. Takes 1 to 3 minutes: returns a job_id; call get_asset with it.

Input parameters:

- `accountName` (string, required): The company to plan for.
- `idempotencyKey` (string): Optional: any unique string for this call. Retrying with the same key returns the first result and never charges twice.
- `maxAmountCents` (integer): Optional: the most this call may cost, in cents. If the price is higher, nothing runs and nothing is charged.
- `productDescription` (string): What you sell to this account, if different from the product saved in Andru (a sentence or two).
- `quoteId` (string): Optional: the quote_id from quote, to pay the quoted price (held for 30 minutes).
- `refresh` (boolean): Build a new plan even if one from the last 30 days exists. Default false.

### `get_evaluation_criteria` (~336 tokens)

Score fit to a buyer's needs

After discovery, checking what the buyer said they need against what the person offers: use this when the person knows what a buyer needs and wants to see how well their product matches. Pass the buyer's `buyerPainPoints` and `requiredCapabilities`. Returns 0-100 for pain coverage, outcome clarity, capability fit and 3 more dimensions, plus an overall score. To check whether a company is a fit at all, use get_icp_fit_score.

Input parameters:

- `buyerIndustry` (string): Buyer's industry
- `buyerPainPoints` (array): Pain points the buyer has expressed or you expect them to have
- `buyerSize` (string): Buyer company size
- `productDescription` (string): A brief description of what the user's product does and who it's for. Infer this from the conversation if the user has already described their product. If the user hasn't mentioned their product yet,…
- `requiredCapabilities` (array): Capabilities the buyer needs from a solution
- `targetRole` (string): The buyer role being evaluated (e.g., "CFO", "CTO", "VP Sales"). Infer from context — often explicit in the user's question. If not mentioned, default to the most senior relevant role for their verti…
- `vertical` (string): The industry the user sells into (e.g., "fintech", "healthcare", "defense"). Infer from conversation context — the user's product description, company name, or the companies they're asking about. If…

### `get_icp_profile` (~104 tokens)

Read your ideal customer profile

Use this when the person asks who their ideal customer is, who isn't a fit, or needs to explain who buys from them and why. Returns the account's ICP, built from what they sell: the enterprise buyers who decide, what each one is measured on and the concerns each needs answered, the signals that a company is ready to change, and who isn't a fit. If the first ICP is still being built, it says so; ask again in a minute.

### `discover_prospects` (~297 tokens)

Find likely buyers

Before outreach, finding companies with a reason to change now: use this when the person needs new companies to sell to, for example when their pipeline is thin. Searches the web for real companies showing the problem the person's product solves right now (hiring, launches, funding, expansion) and links the page behind every piece of evidence. Uses the product saved on the account. Takes up to a couple of minutes. Only companies with sourced evidence are returned.

Input parameters:

- `companyName` (string): Your company name. Defaults to the product saved on your account.
- `coreCapability` (string): The single most important thing your product does — the core capability that makes customers buy
- `idempotencyKey` (string): Optional: any unique string for this call. Retrying with the same key returns the first result and never charges twice.
- `industry` (string): Target industry to search within
- `maxAmountCents` (integer): Optional: the most this call may cost, in cents. If the price is higher, nothing runs and nothing is charged.
- `productDescription` (string): What your product does and who it's for. Defaults to the product saved on your account.
- `quoteId` (string): Optional: the quote_id from quote, to pay the quoted price (held for 30 minutes).
- `targetMarket` (string): Target market segment (e.g., "Series A SaaS companies")

### `get_pre_brief` (~359 tokens)

Prepare for a meeting

Use this when the person has a specific upcoming meeting or call and wants to be ready for it. This is the default for "prepare me for my call". Returns a short brief: what the meeting is for and what each person in the room likely thinks going in (what they want, the concerns they need answered, what moves them, and where they'll disagree), built from the account's buying committee and labelled as Andru's assumptions to correct. Send the meeting (from their calendar, or described in a sentence), what kind of meeting it is, and who will be there by title. If you leave out who's in the room, Andru answers with the six buyers to choose from. To talk with the buyers before the meeting, use simulate_buyer_persona with the same brief.

Input parameters:

- `companyName` (string): Company you're meeting. Andru looks for the matching meeting on the person's calendar.
- `meeting` (string): The meeting in a sentence if it isn't on their calendar, e.g. 'pricing call with the company's VP of Finance and their IT lead'.
- `meetingId` (string): The meeting from the person's calendar (an id from a previous reply). Leave it out and describe the meeting in `meeting` instead.
- `room` (array): Who will be there: up to 8 people, each with their title and, if you know it, which of the six buyers they are.
- `situation` (string): What kind of meeting: a discovery call, where they speak first; a deal meeting (demo, pricing, pilot, procurement); or a customer review.
- `stage` (integer): Where the deal is, by the last thing the buyer did (required for a deal meeting).

### `batch_fit_score` (~67 tokens)

Score a list of companies

Before outreach, choosing where to spend time: use this when the person has a list of companies to score or rank against their ICP (up to 50 at once). Returns each company's tier and score, plus totals.

Input parameters:

- `companies` (array, required): Companies to score (max 50)

### `get_sales_blueprint` (~322 tokens)

Plan your first sales hire

When the founder is ready to hand the path they've proven to a first seller: use this when the person is planning a sales hire: what role, how to pay it, how to interview for it, or how to ramp the new hire. Returns a job description, comp structure, interview questions that reveal sales ability, a 90-day ramp plan and weekly activity targets tied to their ARR goal.

Input parameters:

- `arrTarget` (string, required): Annual recurring revenue target (e.g., "$2M", "$5M", "$10M"). Ask the user if not mentioned.
- `avgCycleLength` (string): Average sales cycle length (e.g., "30 days", "60 days", "90+ days"). Infer or ask.
- `companyStage` (string, required): Current funding stage. Infer from conversation context if the user has mentioned it.
- `dealSize` (string): Average deal size (e.g., "$15K ACV", "$50K ACV"). Infer from context or ask.
- `idempotencyKey` (string): Optional: any unique string for this call. Retrying with the same key returns the first result and never charges twice.
- `maxAmountCents` (integer): Optional: the most this call may cost, in cents. If the price is higher, nothing runs and nothing is charged.
- `quoteId` (string): Optional: the quote_id from quote, to pay the quoted price (held for 30 minutes).
- `teamSize` (number): Current team size. Infer from context if mentioned.

### `get_thesis_match` (~294 tokens)

Find investors who fit

Fundraising, not selling: use this when the person is raising money and asks which investors to talk to. Finds up to 3 VC firms investing now in companies like theirs, each with a recent deal or stated focus and a link to the page it came from (a live web search, about 30 seconds). Only firms with sourced evidence are returned.

Input parameters:

- `arrRange` (string): Current ARR range (e.g., "$0-$500K", "$500K-$2M", "$2M-$10M"). Infer or ask.
- `idempotencyKey` (string): Optional: any unique string for this call. Retrying with the same key returns the first result and never charges twice.
- `maxAmountCents` (integer): Optional: the most this call may cost, in cents. If the price is higher, nothing runs and nothing is charged.
- `productDescription` (string, required): What the company does and who it serves. Infer from conversation context if the user has already described their product.
- `quoteId` (string): Optional: the quote_id from quote, to pay the quoted price (held for 30 minutes).
- `stage` (string, required): Current funding stage. Infer from context if mentioned.
- `vertical` (string): Industry vertical (e.g., "AI/ML", "FinTech", "HealthTech", "SaaS"). Infer from product description.

### `simulate_buyer_persona` (~648 tokens)

Prepare with buyer role-play

Use this only when the person asks to talk with, or play out the meeting with, the buyers who'll be in the room. Andru writes a brief of what each person likely thinks going in (10 briefs a day), then plays them, one or several at once, in a Deal Prep session of 25 turns, asking what real buyers ask. Say "End role-play. How did I do?" for a scored debrief and what to take into the meeting. For the written brief alone, use get_pre_brief; it writes the same brief this session starts from.

Input parameters:

- `brief_id` (string): The brief to open a session from.
- `idempotencyKey` (string): Optional: any unique string for this call. Retrying with the same key returns the first result and never charges twice.
- `maxAmountCents` (integer): Optional: the most this call may cost, in cents. If the price is higher, nothing runs and nothing is charged.
- `meeting` (string): The meeting in a sentence, when it isn't on the calendar.
- `meeting_id` (string): A meeting from mode=meetings.
- `message` (string): mode=reply: what the seller says to the buyer. "End role-play. How did I do?" ends with a debrief.
- `mode` (string): meetings = the user's calendar meetings in the next 7 days. brief = the brief for a meeting (10 a day). opening = open a Deal Prep session from a brief_id, or with one buyer. reply = the founder's ne…
- `persona` (string): Which of the user's six buyers to simulate (mode=list shows them, from their buying committee). Pick based on who the user is preparing to meet.
- `productDescription` (string): What the user's product does. Defaults to the product in their ICP.
- `productName` (string): Product name. Defaults to the product in their ICP.
- `quoteId` (string): Optional: the quote_id from quote, to pay the quoted price (held for 30 minutes).
- `room` (array): Who's in the room, 1–8 people, each with persona (one of the six buyers) and an optional title and name.
- `session_id` (string): The Deal Prep session to continue (returned by mode=opening). Required for mode=reply.
- `session_key` (string): Optional idempotency key for opening a session: retrying with the same key never charges twice.
- `situation` (string): discovery, deal or customer_review.
- `speaker` (string): Who answers this turn (p1, p2…, from the brief).
- `stage` (number): The deal's stage, 0–7.
- `stageId` (number): Buyer journey stage (1=Researching, 2=Quantifying, 3=Exploring, 4=Comparing, 5=Business Case, 6=Implementing, 7=Advocating). Default: 3 (Exploring).

### `get_revenue_memory` (~139 tokens)

Search what Andru remembers

What Andru has learned about their buyers and deals: use this when the person asks what they decided, learned or recorded before: metrics, deal patterns, account history, decisions and habits Andru has saved. Filter by category, key pattern or memory type.

Input parameters:

- `category` (string): Filter to a specific memory category. Omit to search all.
- `keyPattern` (string): Filter keys matching this pattern (supports * wildcards, e.g., "*mrr*", "acme_*").
- `memoryType` (string): Filter by memory type. episodic=specific facts, semantic=patterns, procedural=behavioral habits.

### `log_revenue_insight` (~213 tokens)

Save what a deal taught

Writing down what each deal taught: use this when the person asks you to remember something about their buyers or deals: a deal decision, a reason a deal was won or lost, an ICP refinement, a metric update or a strategic pivot. Saving an existing key keeps the previous value in its history.

Input parameters:

- `category` (string, required): What kind of memory this is.
- `confidence` (number): How confident this memory is (0.0-1.0). Default: 1.0 for founder-stated facts.
- `domain` (string): Business domain this memory relates to. Default: general.
- `key` (string, required): Unique identifier for this memory (lowercase_underscored, e.g., "current_arr", "acme_deal_stage").
- `memoryType` (string): episodic=time-bound fact, semantic=general pattern, procedural=behavioral habit. Default: episodic.
- `value` (string, required): The memory content — a concise, specific fact or insight.

### `get_founder_context` (~70 tokens)

Read what Andru knows about you

The context behind every step: use this when the person asks what Andru is, or what it knows about them or their company. Andru is the person's enterprise buyer specialist. Returns their profile, product, and memory grouped as What I Know, Patterns I've Noticed and How You Operate.

### `get_memory_history` (~94 tokens)

Show how a memory changed

Use this when the person asks how one saved metric, deal stage or priority changed over time, such as "What was my MRR 3 months ago?" or "When did my biggest deal move into procurement?".

Input parameters:

- `category` (string, required): Memory category (e.g., "metric", "account").
- `key` (string, required): Memory key (e.g., "mrr", "acme_deal_stage").

### `get_market_signals` (~179 tokens)

See what's moving in your market

Use this when the person asks what's changing in their market or their buyers' markets, or needs a reason a buyer might act now. Returns relevance-ranked signals (trends, buyer pain, moves by the alternatives buyers weigh, regulatory and tech shifts, hiring and funding), each with its impact on buyers and a recommended action. Signals come from Market Pulse; if the account has no Market Pulse yet, it says so.

Input parameters:

- `industry` (string): Optional industry/vertical filter.
- `limit` (number): Max signals (1–25). Default 10.
- `minRelevance` (number): Minimum relevance 0–1. Default 0.5.
- `signalType` (string): Optional filter to one signal category.
- `windowDays` (number): Look-back window in days (1–30). Default 7.

### `assess_company_readiness` (~302 tokens)

Score a company's revenue readiness

Checking whether a company's revenue engine is ready for its next stage: use this when the person wants to score one company's revenue readiness from its operating metrics (for example ARR, net revenue retention, sales cycle). Returns a Revenue Readiness Index (0-100) with stage fit, confidence, and the #1 growth constraint. Pass the metrics you have; more metrics give higher confidence. For every portfolio company at once, use get_portfolio_readiness_rollup.

Input parameters:

- `companyName` (string): Optional label for the company being assessed.
- `idempotencyKey` (string): Optional: any unique string for this call. Retrying with the same key returns the first result and never charges twice.
- `maxAmountCents` (integer): Optional: the most this call may cost, in cents. If the price is higher, nothing runs and nothing is charged.
- `metrics` (object, required): Operating metrics (any subset): arr, mrr, momGrowth or yoyGrowth (%), netRevenueRetention (%), grossMargin (%), monthlyChurn (%), cac, ltv, burnMultiple, customerCount, pipelineValue, salesCycleDays.…
- `quoteId` (string): Optional: the quote_id from quote, to pay the quoted price (held for 30 minutes).

### `get_portfolio_readiness_rollup` (~184 tokens)

Portfolio readiness scorecard

Portfolio oversight: use this when a PE or VC operator wants a scorecard across all their portfolio companies, or asks which company is most at risk. Returns each company's Revenue Readiness Index, comparable across companies, with the average, the at-risk count and customer-concentration risk.

Input parameters:

- `idempotencyKey` (string): Optional: any unique string for this call. Retrying with the same key returns the first result and never charges twice.
- `maxAmountCents` (integer): Optional: the most this call may cost, in cents. If the price is higher, nothing runs and nothing is charged.
- `portfolioId` (string, required): The portfolio to roll up. whoami lists yours with their ids.
- `quoteId` (string): Optional: the quote_id from quote, to pay the quoted price (held for 30 minutes).

### `generate_portfolio_brief` (~356 tokens)

Brief on portfolio sales activity

Portfolio oversight: use this when a PE or VC operator wants a written brief on their portfolio companies' sales activity for a period: what Andru's work across the companies found (targets, opportunities, overlaps), each company's public news (launches, customers, partnerships, sales hires, new markets), and the market signals around their buyers, with sources. Not a financial or performance report. Send the companies (name and website, up to 15) or a portfolioId; with neither, Andru suggests the companies on the firm's website for the person to confirm. Takes a few minutes: returns a job_id; call get_asset with it.

Input parameters:

- `companies` (array): The portfolio companies to brief, up to 15. Saved as a portfolio on your account the first time.
- `idempotencyKey` (string): Optional: any unique string for this call. Retrying with the same key returns the first result and never charges twice.
- `maxAmountCents` (integer): Optional: the most this call may cost, in cents. If the price is higher, nothing runs and nothing is charged.
- `periodEnd` (string): Optional ISO date for the period end. Default: the end of the last full period.
- `periodStart` (string): Optional ISO date for the period start. Default: the start of the last full period.
- `periodType` (string): Reporting period type. Default quarterly.
- `portfolioId` (string): A portfolio already on your account (returned by an earlier brief). With companies, they are added to it.
- `quoteId` (string): Optional: the quote_id from quote, to pay the quoted price (held for 30 minutes).

### `consult_agent` (~287 tokens)

Ask an Andru specialist

Any step, when no other tool fits: use this when the person asks an open question for one of Andru's domain experts. Gets a domain-scoped answer in natural language (it may call lookup tools; tools that cost money must be called directly). One turn per call; pass prior turns as `history` to continue. Use `module` to pick the expert (e.g. 'market-clarity', 'deal-acceleration', 'due-diligence', 'portfolio-ops').

Input parameters:

- `history` (array): Optional prior turns: [{ role, content }]. At most 10 turns of 2,000 characters each.
- `idempotencyKey` (string): Optional: any unique string for this call. Retrying with the same key returns the first result and never charges twice.
- `maxAmountCents` (integer): Optional: the most this call may cost, in cents. If the price is higher, nothing runs and nothing is charged.
- `message` (string, required): Your question / request for the agent (up to 4,000 characters).
- `module` (string, required): Which domain agent to consult (e.g. 'market-clarity', 'due-diligence', 'portfolio-ops').
- `quoteId` (string): Optional: the quote_id from quote, to pay the quoted price (held for 30 minutes).

### `list_assets` (~179 tokens)

Search the asset catalog

Use this when the person needs a deliverable, often something their champion will carry into meetings the person won't be in (a business case for the CFO, an email draft, a board deck), or asks what Andru can make. Searches Andru's catalog of 139 assets, from enterprise deals to hiring, fundraising and buying. Each entry says what it is, the business outcome, whether it needs the person's own data, and whether it can be generated today. Then call generate_asset with the asset's name.

Input parameters:

- `available_only` (boolean): Only assets that can be generated today.
- `group` (string): Optional catalog group.
- `limit` (number): Maximum results (default 15).
- `query` (string): Keywords for what you need, e.g. 'board deck', 'buying committee', 'first sales hire'.

### `generate_asset` (~175 tokens)

Build an asset

Building the material a step needs, often what the champion carries into rooms the person won't be in: use this when the person picked an asset from Andru's catalog (find it with list_assets), e.g. 'Board Presentation', 'Buying Committee Navigation'. Built from everything Andru knows about their company and saved to their Andru library. Takes up to a few minutes: returns a job_id; call get_asset with it to receive the asset as markdown.

Input parameters:

- `asset` (string, required): The asset name from list_assets.
- `prospectCompany` (string): For a prospect asset (Pre-Call Intelligence Brief, Deal Reengagement Strategy, Personalized Cost of Inaction One-Pager): the company it is for.
- `prospectContact` (string): For a prospect asset: the person it is for, name and title.

### `get_asset` (~154 tokens)

Collect a finished result

Collecting what Andru built for a step: use this when the person asks whether something Andru started is done: an asset from generate_asset, a brief from generate_portfolio_brief, or an account plan from get_account_plan. While it is building you get its progress; when it is done you get the asset or brief in full as markdown, or the plan's link and summary (all saved to their Andru account). To open something already in the library, send its asset_id from list_my_assets instead.

Input parameters:

- `asset_id` (string): The asset_id from list_my_assets.
- `job_id` (string): The job_id returned by generate_asset, generate_portfolio_brief or get_account_plan.

### `cancel_job` (~77 tokens)

Stop an asset build

Use this when the person wants to stop an asset that generate_asset is still building. Send the job_id. What it had written is discarded. A build that already finished stays as it is; collect it with get_asset. Briefs and account plans can't be stopped.

Input parameters:

- `job_id` (string, required): The job_id returned by generate_asset.

### `list_my_assets` (~70 tokens)

List my saved assets

Use this when the person asks what Andru has already built for them, or wants to open something they made earlier. Lists the assets saved to their Andru library: each one's name, when it was built, and whether it was built in part. Open one with get_asset and its asset_id.

### `set_product_context` (~179 tokens)

Tell Andru what you sell

Use this when the person tells you what they sell, or Andru doesn't know their product yet. Send their company website (Andru reads it and remembers the product) or a short product description, once. Andru turns it into a product description and, from that, their first ICP: who fits and who doesn't (about 3 minutes). Every later call uses it. Call with no arguments to see what Andru has saved.

Input parameters:

- `productDescription` (string): Or: what your product does and who it is for (2-3 sentences).
- `targetRole` (string): Optional: the buyer role you target, e.g. CFO.
- `vertical` (string): Optional: the industry you sell into.
- `website` (string): Your company website, e.g. acme.com. Andru reads the homepage once.

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/geter-andru-andru-intelligence/mcp#diagnostics

## Score history

- 2026-11-05: 84
- 2026-11-04: 84
- 2026-11-03: 84
- 2026-11-02: 83
- 2026-11-01: 83
- 2026-10-31: 82
- 2026-10-30: 82
- 2026-10-29: 81
- 2026-10-28: 81
- 2026-10-27: 80
- 2026-10-26: 80
- 2026-10-25: 80
- 2026-10-24: 80

## Common questions

### What is the Andru MCP server?

Andru is an MCP server listed in the public MCP registry as io.github.geter-andru/andru-intelligence. Revenue intelligence for complex B2B growth. This page covers its hosted endpoint (https://mcp.andru-ai.com/mcp).

### Is the Andru MCP server safe to use?

Andru scores 84 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the Andru MCP server expose?

Andru exposes 36 tools: preview_company, signup_start, signup_verify, signup_status, whoami, and 31 more. Their descriptions and schemas cost roughly 8,273 tokens of context every time the server is loaded.

### Does the Andru MCP server require authentication?

Yes. Andru asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.

### Is the Andru MCP server still maintained?

Andru is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://mcp.andru-ai.com/mcp
- Website: https://andru-ai.com/docs/mcp
- Changelog RSS feed: https://verifymcp.io/servers/geter-andru-andru-intelligence/mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/geter-andru-andru-intelligence/mcp.json
- HTML version of this page: https://verifymcp.io/servers/geter-andru-andru-intelligence/mcp
