MCP

Connect AI Dealigence directly to your agent.

A live MCP server at aidealigence.com/mcp - works with or without a trailing slash, authenticated with the same API key as the REST API. Ten tools, thin wrappers over the same research engine - no separate contract to learn.

Direct HTTP client (a client with native streamable-HTTP MCP support)
{
  "mcpServers": {
    "ai-dealigence": {
      "url": "https://aidealigence.com/mcp",
      "headers": {
        "Authorization": "Bearer dl_live_xxx"
      }
    }
  }
}
Claude Desktop (claude_desktop_config.json) - via mcp-remote
{
  "mcpServers": {
    "ai-dealigence": {
      "command": "npx",
      "args": [
        "-y", "mcp-remote",
        "https://aidealigence.com/mcp",
        "--header", "Authorization: Bearer dl_live_xxx"
      ]
    }
  }
}
Cursor (~/.cursor/mcp.json) - via mcp-remote
{
  "mcpServers": {
    "ai-dealigence": {
      "command": "npx",
      "args": [
        "-y", "mcp-remote",
        "https://aidealigence.com/mcp",
        "--header", "Authorization: Bearer dl_live_xxx"
      ]
    }
  }
}
LangChain / LangGraph (Python)
import time, requests
from langchain_core.tools import tool

API_KEY = "dl_live_xxx"
BASE = "https://aidealigence.com/api/v1"

@tool
def resolve_objective(objective: str) -> dict:
    """Resolve a business objective to verified decision-makers,
    with evidence. Real research - takes minutes, not seconds."""
    headers = {"Authorization": f"Bearer {API_KEY}"}
    created = requests.post(
        f"{BASE}/objectives", json={"objective": objective}, headers=headers
    ).json()
    while created["status"] == "researching":
        time.sleep(5)
        created = requests.get(
            f"{BASE}/objectives/{created['id']}", headers=headers
        ).json()
    return created

# LangGraph: add resolve_objective to your ToolNode / bind_tools() list
# exactly like any other tool - it's a plain @tool, nothing MCP-specific
# required.
CrewAI (Python)
import time, requests
from crewai.tools import tool

API_KEY = "dl_live_xxx"
BASE = "https://aidealigence.com/api/v1"

@tool("Resolve business objective")
def resolve_objective(objective: str) -> dict:
    """Resolve a business objective to verified decision-makers,
    with evidence. Real research - takes minutes, not seconds."""
    headers = {"Authorization": f"Bearer {API_KEY}"}
    created = requests.post(
        f"{BASE}/objectives", json={"objective": objective}, headers=headers
    ).json()
    while created["status"] == "researching":
        time.sleep(5)
        created = requests.get(
            f"{BASE}/objectives/{created['id']}", headers=headers
        ).json()
    return created

# Add resolve_objective to any Agent's tools=[...] list.

Ten tools, composable

Small and specific rather than one do-everything call - a model can reason about when to use each one.

resolve_objective

Find the people most capable of achieving a business objective.

objective (string, required), location (string, optional), max_results (integer, default 5)

find_decision_maker

Find the most relevant decision maker inside a specified company.

company (string, required), objective (string, required)

resolve_company

Find companies relevant to a business objective.

objective (string, required), market (string, optional)

resolve_function

Determine which organisational function owns an objective.

objective (string, required), company (string, optional)

verify_person

Verify whether a person currently holds a specified role.

person_id (string, required)

get_evidence

Retrieve the evidence behind a recommendation.

evidence_id (string, required)

find_access_route

Find a legitimate route to reach the recommended person.

person_id (string, required)

compare_targets

Compare several candidates by relevance, authority, and access.

person_ids (array of strings, required)

generate_contact_package

Build a person's contact package: emails, phones, WhatsApp, LinkedIn, X and bio pages, each labelled Business or Personal with its source, date and confidence, plus warm-introduction paths and a suggested approach. Costs 5 credits.

person_id (string, required), objective (string, optional)

get_contact_package

Read a contact package already built for a person. Free to read.

person_id (string, required)

Works with

ClaudeCursorCodexCustom agentsLangGraphCrewAI

Auth today is a bearer API key, the same one the REST API uses - a working model, not a placeholder. Full OAuth 2.1 authorization (client registration, delegated end-user consent) is the documented next step once there’s a concrete reason to need it.

Troubleshooting

A tool call that fails returns a real MCP tool error (is_error: true on the result, not a bare crash) with the same structured error body the REST API uses - see the error codes for what each one means. A malformed request to the server itself (missing headers, invalid JSON-RPC) returns a standard JSON-RPC error object instead, before any tool even runs.

401/403 almost always means the Authorization header didn’t reach the server - check your client config passes it exactly as shown above, and that a bridge process like mcp-remote is actually forwarding --header rather than dropping it.