npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@adrata/adrata-mcp

v1.0.55

Published

Adrata MCP Server — connect Claude Code, Codex, Gemini, Cursor, and other AI tools to Adrata, Lightspeed, Galaxy, Oasis and Portals through governed workspace tools. Additional toolsets load with enable_toolset.

Readme

@adrata/adrata-mcp

Connect Claude Code, Cursor, Windsurf, VS Code, and Claude Desktop to your Adrata CRM workspace via the Model Context Protocol.

Three tiers: Free (no account needed), Pro (API key), Enterprise (OAuth workspace connection).

Two names, one server

This package is also published as @adrata/starfield-mcp (binary starfield-mcp), for people wiring a coding agent to their Starfield board rather than to the CRM. It is not a fork and not a subset: it depends on this package, defaults ADRATA_MCP_SERVER_NAME to Starfield so the client's server list says Starfield, and imports the same server.js. Same governed tool surface, same tiers, same governed-write contract, and nothing to keep in sync.

Install whichever name matches what you are doing. If you already have one, you do not need the other.

Installation

Adrata CLI installer

For Claude Code and Codex, use the CLI installer so the assistant gets both MCP access and the Adrata operating instructions:

adrata login --api-url=https://api.adrata.com --token=<api_key> --workspace=<workspace_id>
adrata install --target=all --scope=project

The installer writes .claude/mcp.json, .claude/CLAUDE.md, .codex/config.toml, and AGENTS.md for the current project, plus the bundled Agent Skills into .claude/skills, .codex/skills, and .agents/skills. It does not embed secrets in the MCP config; the MCP server reads the token from ADRATA_CONFIG_FILE.

Aliases: adrata gtm install and adrata agent install.

Codex only reads TOML. Its MCP config lives under [mcp_servers.<name>] in ~/.codex/config.toml or <project>/.codex/config.toml. A .codex/mcp.json is ignored — no error, no server, no clue why. The same applies to ChatGPT, which is the same product.

Codex also ignores a project config.toml in a directory it has not been told to trust, and says nothing about that either. On a fresh clone, answer "Yes, allow Codex to work in this folder" on first launch, or add to ~/.codex/config.toml:

[projects."/absolute/path/to/your/checkout"]
trust_level = "trusted"

Skills load in untrusted projects; MCP servers do not. codex mcp list, run from the project directory, prints exactly what Codex will start — use it to confirm rather than guessing from the file.

Claude Code

claude mcp add adrata -- npx -y @adrata/adrata-mcp

Or add to .claude/mcp.json:

{
  "mcpServers": {
    "adrata": {
      "command": "npx",
      "args": ["-y", "@adrata/adrata-mcp"],
      "env": {
        "ADRATA_API_KEY": "ak_your_key_here"
      }
    }
  }
}

Codex CLI / ChatGPT

TOML, not JSON. Add to ~/.codex/config.toml (or <project>/.codex/config.toml for one repo):

[mcp_servers.adrata]
command = "npx"
args = ["-y", "@adrata/adrata-mcp"]

[mcp_servers.adrata.env]
ADRATA_API_KEY = "ak_your_key_here"

Then verify from the project directory:

codex mcp list   # adrata must appear; if it does not, the project is untrusted

Cursor

Add to .cursor/mcp.json:

{
  "mcpServers": {
    "adrata": {
      "command": "npx",
      "args": ["-y", "@adrata/adrata-mcp"],
      "env": {
        "ADRATA_API_KEY": "ak_your_key_here"
      }
    }
  }
}

Windsurf

Add to .windsurf/mcp.json:

{
  "servers": {
    "adrata": {
      "command": "npx",
      "args": ["-y", "@adrata/adrata-mcp"],
      "env": {
        "ADRATA_API_KEY": "ak_your_key_here"
      }
    }
  }
}

Note: Windsurf uses "servers" instead of "mcpServers".

VS Code

Add to .vscode/mcp.json:

{
  "mcpServers": {
    "adrata": {
      "command": "npx",
      "args": ["-y", "@adrata/adrata-mcp"],
      "env": {
        "ADRATA_API_KEY": "ak_your_key_here"
      }
    }
  }
}

Claude Desktop / Cowork

Add to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "adrata": {
      "command": "npx",
      "args": ["-y", "@adrata/adrata-mcp"],
      "env": {
        "ADRATA_API_KEY": "ak_your_key_here"
      }
    }
  }
}

Tiers

| Tier | Credentials | What You Get | |------|------------|--------------| | Free | None | Search, email sync, demo scheduling, memory, morning brief teaser | | Pro | ADRATA_API_KEY | + Intelligence, analytics, enrichment, meetings, speedrun, coaching | | Enterprise | OAuth (connect_workspace) | + CRM CRUD, sequences, campaigns, bulk ops, workspace admin |

Get your API key from Settings > API Keys in Adrata. Enterprise users authenticate via the connect_workspace tool or by setting ADRATA_OAUTH_TOKEN.

Tools by Tier

Free Tier (no account needed)

| Tool | Description | |------|-------------| | find_company | Search company profile using AI knowledge | | find_person | Search person profile using AI knowledge | | search_companies | Search companies in CRM | | search_people | Search people in CRM | | search_leads | Search leads | | search_emails | Search emails | | get_email | Get email by ID | | count_emails | Count emails matching criteria | | check_inbox | Check inbox for new emails | | find_or_create_person | Find or create a person record | | find_or_create_company | Find or create a company record | | get_demo_availability | Check demo availability slots | | schedule_demo | Schedule a product demo | | describe_fields | Schema introspection for entity fields | | list_custom_fields | List available custom fields | | save_memory | Store a fact or insight (local in free tier) | | recall | Search saved memories | | who_am_i | View user profile and usage stats | | forget | Remove a saved memory | | morning_brief | Daily briefing (teaser in free tier, full in pro+) | | upgrade_account | Open signup/upgrade page | | check_subscription | Check current plan and usage | | connect_workspace | Connect Adrata workspace via OAuth | | disconnect_workspace | Disconnect workspace | | workspace_status | Check workspace connection status | | inspect_provider_catalog | Inspect available integration providers | | list_provider_endpoints | Inspect provider endpoints/actions before workflow drafting | | validate_integration_manifest | Validate a custom integration manifest | | validate_extension_manifest | Validate a custom extension manifest | | draft_workflow | Draft a headless workflow manifest | | validate_workflow_draft | Validate workflow permissions, audit, policy, and replay rules | | dry_run_workflow | Dry-run or locally plan a workflow execution | | adrata_api_catalog | Explain governed full-platform API access | | inspect_provider_catalog | Inspect available integration providers | | list_provider_endpoints | Inspect provider endpoints/actions before workflow drafting | | validate_integration_manifest | Validate a custom integration manifest | | validate_extension_manifest | Validate a custom extension manifest | | draft_workflow | Draft a headless workflow manifest | | validate_workflow_draft | Validate workflow permissions, audit, policy, and replay rules | | dry_run_workflow | Dry-run or locally plan a workflow execution | | list_toolsets | List available composite toolsets | | enable_toolset | Enable a composite toolset |

Pro Tier (requires API key)

All free tools plus:

| Tool | Description | |------|-------------| | get_company | Get full company details | | get_person | Get full person details | | get_opportunity | Get opportunity details | | get_action | Get action details | | enrich_company | AI-powered company enrichment | | enrich_person | AI-powered contact enrichment | | get_intent_signals | Buying intent signals for a company | | list_customer_signals | First-party customer signals (the store live plays fire from) for the workspace or a subject | | get_deal_authority | Map decision makers and authority | | get_competitor_intel | Competitive intelligence brief | | score_company_icp | Score company against ideal customer profile | | get_icp_distribution | ICP score distribution analytics | | get_pipeline_metrics | Pipeline analytics dashboard | | get_forecast_data | Revenue forecast data | | get_activity_summary | Activity summary for a time period | | count_records | Count records by entity type | | get_priority_pursuits | Evidence-ranked daily account and next-move list | | get_speedrun_list | Legacy alias for get_priority_pursuits | | list_meetings | List scheduled meetings | | get_meeting | Get meeting details | | get_meeting_summary | AI-generated meeting summary | | get_meeting_action_items | Action items from a meeting | | list_actions | List actions | | list_overdue_actions | List overdue actions | | list_today_actions | List actions due today | | list_notes | List notes for an entity | | log_interaction | Log a sales interaction | | qualify_company | Composite: full company qualification | | research_company | Composite: deep company research | | research_person | Composite: deep person research | | discover_prospects | Composite: find new prospects | | get_next_contacts | Composite: next best contacts to reach | | commit_lead_to_outbound | Governed: commit a lead above the /targets line — Pipeline's Outbound stage | | release_lead_from_outbound | Governed: take a lead back out of Outbound | | list_outbound_leads | Who is committed to Outbound right now | | get_competitive_intel | Composite: competitive analysis | | get_meeting_brief | Composite: pre-meeting intelligence | | get_deal_coaching | Composite: deal coaching insights | | get_signals_dashboard | Composite: signals overview | | get_forecast | Composite: forecast summary | | draft_email | Composite: draft a sales email | | get_outreach_analytics | Composite: outreach performance | | get_network_paths | Composite: relationship paths | | search_emails_composite | Composite: advanced email search | | get_email_thread | Composite: full email thread | | find_intro_path | Find a warm relationship path | | get_network_stats | Network coverage and intro health | | list_webhook_events | Supported webhook event catalog |

Enterprise Tier (requires OAuth)

All free and pro tools plus:

| Tool | Description | |------|-------------| | create_company | Create a company record | | update_company | Update company fields | | delete_company | Delete a company | | create_person | Create a person record | | update_person | Update person fields | | delete_person | Delete a person | | create_opportunity | Create an opportunity | | update_opportunity | Update opportunity fields | | delete_opportunity | Delete an opportunity | | create_action | Create an action/task | | update_action | Update an action | | complete_action | Mark an action complete | | delete_action | Delete an action | | create_note | Create a note | | update_note | Update a note | | delete_note | Delete a note | | get_company_people | List people at a company | | get_company_opportunities | List opportunities for a company | | get_company_actions | List actions for a company | | search_opportunities | Search opportunities | | list_buyer_groups | List buyer groups | | get_buyer_group | Get buyer group details | | create_buyer_group | Create a buyer group | | add_buyer_group_member | Add member to buyer group | | get_buyer_group_members | List buyer group members | | list_intro_requests | List tracked warm intro requests | | get_intro_pipeline | View the warm intro pipeline | | create_intro_request | Create a tracked warm intro request | | update_intro_request | Update intro request status | | list_agent_tasks | List long-running agent/background tasks | | create_agent_task | Create a long-running agent/background task | | get_agent_task | Get task status and result | | cancel_agent_task | Cancel a running task | | adrata_api_request | Governed low-level request to allowlisted, non-sensitive platform APIs | | adrata_ai_tool_catalog | List the AI CRM tools Adrata chat can use | | adrata_ai_tool_execute | Execute the same governed ToolDispatcher path used by Adrata chat | | get_account_read | Grounded no-loss account/deal read via the chat ToolDispatcher | | rank_paths_to_power | Ranked warm/network paths to decision makers via the chat ToolDispatcher | | recommend_deal_move | Read-only no-loss next deal move recommendation via the chat ToolDispatcher | | list_external_pipelines | List refreshable Channels such as YC, Techstars, CSV, LinkedIn, and sequence sources | | list_external_pipeline_members | Preview Channel members before import | | import_external_pipeline_members | Import Channel members through Adrata bulk import | | list_external_companies | Query nightly-refreshed external company catalogs | | import_external_companies | Import selected external catalog companies | | rank_companies_by_icp | Rank imported companies against the workspace ICP profile | | rank_people_by_icp | Rank imported people against the workspace ICP profile (title/persona + firmographics) | | check_batch_import_status | Poll bulk import progress and enrichment status | | move_pipeline_card | Move a pipeline card and publish realtime UI updates | | list_webhooks | List outbound webhook subscriptions | | create_webhook | Create a webhook subscription | | update_webhook | Update webhook URL, events, or filters | | delete_webhook | Delete a webhook subscription | | test_webhook | Queue a signed webhook test event | | list_webhook_deliveries | List delivery attempts | | get_webhook_delivery | Inspect a delivery attempt | | replay_webhook_delivery | Replay a delivery attempt | | test_provider_credential | Run a dry-run or live credential health test with policy/audit metadata | | request_deployment | Request custom integration or extension deployment after manifest validation | | request_workflow_deployment | Request workflow deployment after a prior dry-run id | | replay_workflow_run | Dry-run or request replay for a workflow run | | list_campaigns | List email campaigns | | get_campaign | Get campaign details | | list_sequences | List email sequences | | get_sequence | Get sequence details | | list_users | List workspace users | | get_user | Get user details | | get_current_user | Get current authenticated user | | send_email | Send an email | | reply_to_email | Reply to an email thread | | manage_sequences | Manage sequence enrollment | | bulk_import | Bulk import records from CSV | | export_data | Export records as JSON/CSV | | manage_custom_fields | Manage custom field definitions | | get_workspace_settings | View workspace configuration | | manage_company | Composite: full company management | | manage_person | Composite: full person management | | manage_opportunity | Composite: full opportunity management | | manage_activity | Composite: full activity management | | manage_buyer_group | Composite: full buyer group management | | get_action_history | Composite: action history timeline | | make_call | Composite: initiate a call | | send_sms | Composite: send SMS message | | get_communication_status | Composite: read a call/SMS dispatch outcome and its carrier | | list_calling_identities | Composite: which numbers the seller can call or text from | | get_call_transcript | Composite: retrieve call transcript | | check_calendar | Composite: check calendar availability | | schedule_meeting | Composite: schedule a meeting | | manage_domains | Composite: email domain management | | manage_mailboxes | Composite: mailbox configuration | | get_deliverability | Composite: email deliverability metrics | | connect_provider | Composite: connect email provider | | manage_workspace | Composite: workspace settings | | manage_data | Composite: data operations |

Agent API Bridge Governance

adrata_api_request is a broad fallback for platform API access. Prefer targeted tools such as adrata_ai_tool_execute, move_pipeline_card, webhook tools, integration tools, and workspace/user tools when they exist.

The bridge enforces least-privilege deny rules for sensitive administrative surfaces even when those route families are present in the platform allowlist: /api/v1/billing, /api/v1/api-keys, /api/v1/observability, /api/v1/users, /api/v1/integrations, /api/v1/custom-integrations, and /api/v1/webhooks.

Write requests through adrata_api_request default to dry-run. A live POST, PUT, PATCH, or DELETE requires dryRun:false, approved:true, a non-empty reason, and an idempotencyKey; the MCP bridge forwards the reason, actor, and idempotency metadata as request headers.

Known gap: the MCP bridge now applies a consistent approval/idempotency envelope, but not every downstream API endpoint has a uniform server-side envelope yet. Treat adrata_api_request as a governed escape hatch and use higher-level MCP tools for privileged operations.

Galaxy artifacts and collaboration

Galaxy tools use the same documents, revisions and access checks as the app. Product access and the caller's permission to each item are required; connecting an agent does not grant it access to other people's private files.

  • Use galaxy_create_artifact and galaxy_update_artifact for documents, sheets, decks and designs. Read before updating and supply the exact expectedRevision so a concurrent edit is preserved. Successful writes return persisted readback.
  • Use galaxy_create_folder and galaxy_manage_item to organize files, star them, and move them into or out of trash. galaxy_delete_item permanently deletes an already trashed item and is classified as a destructive write.
  • Use the Galaxy sharing tools for named recipients. Public snapshot links use the canonical paper_* share tools; public access and recipient access are separate grants with separate revocation.
  • Comments can refer to a whole artifact, exact text at a revision, or a design frame and coordinates. galaxy_update_comment_status resolves, reopens or archives a comment. galaxy_restore_version restores a historical version only when the supplied current revision still matches.

Writes carry the existing approval, reason and idempotency controls. Native Adrata tools use the same canonical operations, so history and attribution stay with the artifact when work moves between the app and an external agent.

Custom Fields

Companies, People, and Opportunities support customFields -- a JSONB object that gets merged on update. Add any key-value pairs without losing existing data.

"Update this company's customFields with outreach_status: contacted"

Action Metadata

Actions support metadata -- a JSONB object for type-specific data. Use it for LinkedIn message copy, call notes, meeting attendees, etc.

"Log a linkedin_connection_request action for this person with metadata containing the message I sent"

Running several MCP processes under separate identities

~/.config/adrata/agent.json -- the session adrata login writes -- is machine-wide. Every MCP process on a host where anyone has ever run adrata login therefore authenticates as that one person, including a process that was launched with its own ADRATA_API_KEY: the key is still sent as X-API-Key, but the bearer token is what the API resolves the caller from.

Usually that is exactly right. It is wrong when several processes on one host are supposed to act as different principals -- a fleet of QA lanes, each holding its own key so that its board writes are graded as an independent agent rather than as the shared human. The API is not confused in that case: it correctly grades a human session's write as human, records it, returns 200, and counts it toward nothing.

Set ADRATA_MCP_PREFER_API_KEY=1 in that process's env, alongside its ADRATA_API_KEY, and it acts as its own api_key:<id> actor.

{
  "mcpServers": {
    "adrata": {
      "command": "npx",
      "args": ["-y", "@adrata/starfield-mcp@latest"],
      "env": {
        "ADRATA_API_KEY": "ak_this_lanes_own_key",
        "ADRATA_MCP_PREFER_API_KEY": "1"
      }
    }
  }
}

Three things it deliberately does not do:

  • It only reads the environment variable. A token sitting in ~/.config/adrata/cli.json is ambient machine state, not a statement of intent by whoever launched this process, and never triggers the preference.
  • It does not outrank ADRATA_OAUTH_TOKEN, which stays first in the chain.
  • It does not touch named identity pools (ADRATA_MCP_IDENTITY_POOL), which return before the credential chain is consulted at all.

With the flag unset -- the default, and every ordinary single-user install -- the credential chain is byte-for-byte what it was.

Environment Variables

| Variable | Required | Default | Description | |----------|----------|---------|-------------| | ADRATA_API_KEY | No | -- | Your API key from Settings > API Keys. Enables pro tier. | | ADRATA_OAUTH_TOKEN | No | -- | OAuth bearer token. Enables enterprise tier. | | ADRATA_MCP_PREFER_API_KEY | No | unset (off) | 1/true/yes/on makes an env-var ADRATA_API_KEY outrank the shared adrata login session and any stored connect_workspace session, and grants it enterprise tier. Leave it unset unless this process was deliberately given its own credential -- see below. | | ADRATA_API_URL | No | https://api.adrata.com | API base URL | | ADRATA_MCP_SERVER_NAME | No | @adrata/adrata-mcp | Display name reported in serverInfo. @adrata/starfield-mcp sets it to Starfield. Does not change the tool prefix, which comes from your client's config key. | | ADRATA_MCP_TRANSPORT | No | stdio | Transport: stdio or http | | ADRATA_MCP_PORT | No | 3100 | Port for HTTP transport | | ADRATA_MCP_CORS_ORIGINS | No | * | Comma-separated CORS origins for HTTP transport | | ADRATA_MCP_REQUIRE_AUTH | No | true | Require Bearer auth for HTTP /mcp; set false only for isolated local testing | | ADRATA_MCP_RESOURCE | No | ${AS}/api/v1/mcp | RFC 8707 canonical resource URI this server binds tokens to | | ADRATA_MCP_AUTHORIZATION_SERVER | No | ADRATA_API_URL | Authorization server(s) advertised in RFC 9728 metadata | | ADRATA_MCP_ACCEPTED_AUDIENCES | No | adrata,<resource> | Extra token audiences accepted by the resource server | | ADRATA_MCP_AUDIENCE_ENFORCEMENT | No | lenient | strict rejects JWTs that carry no aud claim at all | | ADRATA_MCP_ENABLED_DOMAINS | No | (all) | Least-privilege scoping: comma list of tool packs (e.g. crm,email) | | ADRATA_MCP_CLIENT_ID | No | dynamic registration | Operator-provisioned public OAuth client override. Most installations should leave this unset. | | ADRATA_MCP_PRINT_AUTH_URL | No | 0 | Set to 1 to print the authorization URL for headless/manual browser use. |

Authorization (MCP 2025-06-18 spec)

The hosted HTTP transport is an OAuth 2.1 resource server hardened to the 2025 MCP authorization spec:

  • OAuth 2.1 + PKCE (S256). Browser connect_workspace flow with a short-lived (15 min) access token and a rotating refresh token.
  • RFC 8707 Resource Indicators. The client sends resource on the authorize + token requests; the authorization server binds the token's aud to that MCP resource.
  • No token passthrough. Every presented bearer token is checked against this resource's audience before it can reach any tool or the upstream API. A token minted for a different audience is rejected with 401 invalid_token and a WWW-Authenticate challenge pointing at the resource metadata.
  • RFC 9728 Protected Resource Metadata. Served unauthenticated at GET /.well-known/oauth-protected-resource, describing this resource and its authorization server(s) so clients can discover how to authenticate.
  • Honest tool annotations. Every tool advertises truthful readOnly / destructive / idempotent / openWorld hints plus a domain tag. Write and destructive tools are confirmation-gated (host prompt) and are additionally tier-gated + audit-logged server-side; the governed API bridge requires dryRun:false + approved:true + reason + idempotencyKey for any live write.
  • Confused-deputy / tool-poisoning defenses. Annotations and descriptions are derived from real behaviour, never from untrusted model input; audience binding prevents a token issued for client A from being replayed by client B.
  • Scoped per-domain tool packs. Set ADRATA_MCP_ENABLED_DOMAINS to grant a least-privilege subset (e.g. crm,email); out-of-scope tools are refused at dispatch. Workspace-lifecycle tools stay available in every scope.

MCP Registry

This server ships a server.json manifest for the official MCP Registry.

To publish/update the listing:

# 1. Install the registry publisher CLI
brew install mcp-publisher   # or: go install github.com/modelcontextprotocol/registry/cmd/publisher@latest

# 2. Authenticate the com.adrata namespace (GitHub or DNS-verified)
mcp-publisher login github

# 3. Validate and publish from code/mcp/
mcp-publisher publish ./server.json

The namespace com.adrata/* is verified via the adrata/adrata GitHub repo. Bump version in both server.json and package.json before republishing.

Enterprise Setup: OAuth Flow

Enterprise authentication uses the connect_workspace tool for a browser-based OAuth flow:

  1. Call connect_workspace in your AI tool
  2. The MCP package dynamically registers a per-attempt native/public client (no embedded secret)
  3. A browser opens Adrata sign-in and a dark-mode workspace consent screen
  4. Adrata returns to an exact IP-literal loopback callback protected by state + PKCE
  5. Tokens and the issued client ID are stored encrypted in ~/.adrata/tokens.json
  6. Rotating refresh tokens keep the session alive and preserve the MCP resource audience

Alternatively, set ADRATA_OAUTH_TOKEN directly for CI/CD or scripted environments.

Independent QA worker identities

Run QA1 and QA2 as separate MCP processes with separate OAuth stores. Each process must complete its own interactive connect_workspace({ writeAccess: true }) flow, which gives it a distinct dynamically registered OAuth client and token set:

# QA1 process
ADRATA_MCP_IDENTITY_POOL=qa1 \
ADRATA_MCP_CONFIG_DIR=/var/lib/adrata/mcp/qa1 \
npx -y @adrata/adrata-mcp

# QA2 process
ADRATA_MCP_IDENTITY_POOL=qa2 \
ADRATA_MCP_CONFIG_DIR=/var/lib/adrata/mcp/qa2 \
npx -y @adrata/adrata-mcp

A named pool intentionally ignores ADRATA_OAUTH_TOKEN, the shared adrata login session, API keys, CLI tokens, and ~/.adrata/tokens.json. Missing or shared ADRATA_MCP_CONFIG_DIR configuration fails closed; do not copy one pool's token file into another. The pool name is process routing metadata, while the independently issued OAuth credential is the QA identity.

Troubleshooting

Server fails to start

  • Verify Node.js >= 18: node --version
  • Check npx can resolve the package: npx -y @adrata/adrata-mcp --version
  • Look for error messages in the AI tool's MCP server logs

"Tool requires pro tier" message

  • Set ADRATA_API_KEY in the env config of your MCP server definition
  • Get your key from Settings > API Keys in Adrata
  • Restart the MCP server after adding the key

"Tool requires enterprise tier" message

  • Run connect_workspace to authenticate via OAuth
  • Or set ADRATA_OAUTH_TOKEN in the env config
  • Enterprise requires an active Adrata Enterprise subscription

OAuth token expired

  • The server auto-refreshes stored tokens from ~/.adrata/tokens.json
  • If refresh fails, run connect_workspace again
  • Never delete or disconnect the shared ~/.adrata/tokens.json session as a repair step; that silently signs every local agent out. Re-run connect_workspace in the affected process. For a named QA pool, use that pool's own ADRATA_MCP_CONFIG_DIR and complete consent there.

Tools return empty results

  • Verify your API key has access to the workspace
  • Check that the entity exists in your CRM
  • For enterprise tools, confirm your OAuth token has the required scopes

HTTP transport mode

  • Set ADRATA_MCP_TRANSPORT=http for Streamable HTTP transport
  • Server listens on port 3100 by default (configurable via ADRATA_MCP_PORT)
  • Hosted and local HTTP mode require Authorization: Bearer ... by default
  • Configure CORS origins if calling from a web client

Rate limiting

  • Free tier: subject to standard rate limits
  • Pro tier: higher rate limits per API key
  • Enterprise tier: workspace-level rate limits based on plan