# Ahel (remote · mcp.ahel.ai)

Data and tools for your AI agent: company, people, SEO, social and EU register data. Pay per call.

- Trust score: 81/100 (high trust)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- remote · `mcp.ahel.ai`: 81/100 (this document), [markdown](https://verifymcp.io/servers/ai-ahel-ahel/mcp.md), [page](https://verifymcp.io/servers/ai-ahel-ahel/mcp)

## Channel facts

- Endpoint: `https://mcp.ahel.ai`
- Transports: `streamable-http`
- Auth: `required`
- Version: `1.0.1`

## 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**: 100/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.
  - The HSTS (Strict-Transport-Security) header is present.
  - 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**: 74/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 3445 tokens (~313/item across 11 items; 10 tools + 1 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability check failed: schema churn in the 3 days we've observed: 2 tool removals, 0 breaking changes, 0 auth/transport breaks, 0 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 10 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 12 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 Ahel MCP server?

Ahel is a hosted endpoint at https://mcp.ahel.ai/, 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 ai-ahel-ahel 'https://mcp.ahel.ai/'
```

### Cursor

```json
{
  "mcpServers": {
    "ai-ahel-ahel": {
      "url": "https://mcp.ahel.ai/"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "ai-ahel-ahel": {
      "type": "http",
      "url": "https://mcp.ahel.ai/"
    }
  }
}
```

### Codex

```toml
[mcp_servers.ai-ahel-ahel]
url = "https://mcp.ahel.ai/"
```

### opencode

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

### OpenClaw

```bash
openclaw mcp add ai-ahel-ahel --url 'https://mcp.ahel.ai/' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  ai-ahel-ahel:
    url: "https://mcp.ahel.ai/"
```

### Netclaw

```json
{
  "McpServers": {
    "ai-ahel-ahel": {
      "Transport": "http",
      "Url": "https://mcp.ahel.ai/"
    }
  }
}
```

### Vellum

```bash
assistant mcp add ai-ahel-ahel -t streamable-http -u 'https://mcp.ahel.ai/'
```

### Other

```json
{
  "mcpServers": {
    "ai-ahel-ahel": {
      "type": "http",
      "url": "https://mcp.ahel.ai/"
    }
  }
}
```

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-05 (score 81, 0)

- [security] Tool “run_capability” rewrote its description, which is the text the model reads
- [cosmetic] “run_capability” added an optional parameter “max_cost_usd”
- [cosmetic] “capability_inspect” reworded the description of “rows_text”
- [cosmetic] “run_capability” reworded the description of “rows_text”

### 2026-11-04 (score 81, −1)

- [security] The server rewrote its instructions, which are the text every model session reads
- [security] Tool “capability_inspect” rewrote its description, which is the text the model reads
- [security] Tool “feedback” rewrote its description, which is the text the model reads
- [security] Tool “my_tools” rewrote its description, which is the text the model reads
- [security] Tool “run_capability” rewrote its description, which is the text the model reads
- [functional regression] Schema quality: 239 → 306
- [functional] Schema quality: excellent → good
- [cosmetic] “capability_inspect” added an optional parameter “rows”
- [cosmetic] “capability_inspect” added an optional parameter “rows_text”
- [cosmetic] “feedback” added an optional parameter “category”
- [cosmetic] “run_capability” added an optional parameter “confirm”
- [cosmetic] “run_capability” added an optional parameter “rows”
- [cosmetic] “run_capability” added an optional parameter “rows_text”
- [cosmetic] “run_capability” added an optional parameter “run_id”
- [cosmetic] “feedback” reworded the description of “id”
- [cosmetic] “feedback” reworded the description of “note”
- [cosmetic] “feedback” reworded the description of “rating”
- [cosmetic] “run_capability” reworded the description of “arguments”
- [cosmetic] “run_capability” reworded the description of “wait_seconds”
- [cosmetic] “feedback” made “id” optional
- [cosmetic] “feedback” made “rating” optional
- [cosmetic] “run_capability” made “arguments” optional
- [cosmetic] Tool “feedback” changed its title: Rate a run or request → Rate a run or report a problem

### 2026-11-03 (score 82, 0)

- [security regression] Stability: unverified → fail
- [security regression] A breaking change shipped without a version bump: still 1.0.0
- [security regression] Tool “fetch” was removed
- [security regression] Tool “search” was removed
- [security] Tool “run_capability” rewrote its description, which is the text the model reads
- [functional regression] Schema quality: 210 → 239
- [cosmetic] “capability_run_status” added an optional parameter “max_items”
- [cosmetic] “run_capability” added an optional parameter “tag”

### 2026-11-02 (score 82, +42)

- [security improvement] Transport: unverified → pass
- [security improvement] Injection markers: unverified → pass
- [security] First check of Judged manipulation: pass
- [security] Authorization: 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.
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] Schema quality: unverified → 100
- [functional improvement] Tool coverage: unverified → 100
- [functional] First check of Schema quality: fail
- [functional] First check of Schema quality: excellent
- [functional] First check of Destructive annotations: pass
- [functional] First check of Schema quality: fail
- [functional] First check of Tool coverage: 100

### 2026-10-31 (score 40)

First indexed and scored.

## MCP tools (10)

### `my_tools` (~169 tokens)

List or call the team's own tools

This team's own tools: the APIs and MCP servers the team added at ahel.ai/app/tools. Without tool, lists each one with its tools, their inputs and the exact call. With tool ("<key>/<tool name>" from that list) and arguments, calls it with the team's saved credentials, which never enter the chat. NOT for: Ahel's catalog of data tasks and provider tools, which is capability_search. If the transport times out, do not resubmit the work: call again with the same ids and poll.

Input parameters:

- `arguments` (object): With tool: the tool's arguments, matching the inputs the list shows.
- `tool` (string): Optional: "<key>/<tool name>" from the list, to call that tool. Omit to list the team's own tools.

### `capability_search` (~304 tokens)

Search data tasks and provider tools

Search Ahel's catalog of data tasks and provider tools by words, a task id or a tool id: company and people enrichment, SEO, social, ads, e-commerce, reviews, AI generation, market and public data. Each result has its genuine task id or tool id, its platform, its status (ready, needs_connection, coming_soon meaning temporarily unavailable because Ahel has no provider for it yet, or unavailable while the run service is down) with the exact reason; a temporarily unavailable result may carry a market price seen elsewhere, for comparison. The same catalog, ids and statuses as the Catalog page on ahel.ai. Describe the job in plain words; results are ranked by how well they fit. When nothing fits it answers verdict none with the three nearest items: then call catalog_request. Free; changes nothing. NOT for: one item's exact inputs and prices, which is capability_inspect, or the team's own tools, which is my_tools.

Input parameters:

- `kind` (string): Optional: only tasks or only provider tools.
- `limit` (number): How many results, 1-50. Default 10.
- `platform` (string): Optional platform id (companies, google, image-gen): only its items; with no query, its whole shelf.
- `query` (string): Words to match, or an exact task id (companies.enrich) or tool id.
- `status` (string): Optional: only items in this state.

### `capability_inspect` (~554 tokens)

Inspect and price a task or tool

Read one task or provider tool from Ahel's catalog by its id: its exact inputs (Ahel's own contract, or the published reference input when Ahel has none), its status and exact reason, Ahel's price per provider (Unknown when Ahel has no rate), for a temporarily unavailable item the market prices seen elsewhere, for comparison, and the exact run_capability call when it can run. With arguments it also prices that exact run before anything runs: Ahel's quote, the most it may cost, the amount a run would reserve and whether the balance covers it; nothing is reserved, charged or started. With rows or rows_text (up to 100, for people.email.find or companies.register.search or companies.emails.from_website) it quotes a whole list instead: rows, rows that can run, each row's price and the most one row and the list may cost, the balance against it, and what each row that cannot run is missing. Free; changes nothing. NOT for: finding ids, which is capability_search, or running it, which is run_capability.

Input parameters:

- `arguments` (object): Optional: the run's inputs, by name, to price that exact run (a quote only; nothing runs).
- `endpoint_ids` (array): With arguments: price the run on these providers only (endpoint ids from this answer).
- `exclude_endpoint_ids` (array): With arguments: price the run without these providers.
- `id` (string, required): A task id or tool id from capability_search.
- `max_items` (number): With arguments: most rows to price for, 1-100. Default 10.
- `rows` (array): A list for people.email.find or companies.register.search or companies.emails.from_website: 1 to 100 rows, each run once as its own run with its own exact cost. One object per row, such as {"name": "…
- `rows_text` (string): A list for people.email.find or companies.register.search or companies.emails.from_website: 1 to 100 rows, each run once as its own run with its own exact cost. Instead of rows: paste up to 100 rows…
- `timeout_seconds` (number): With arguments: longest the run may take, 1-180 seconds. Default: the provider's own (60, more for slow sources).

### `run_capability` (~1092 tokens)

Run a paid data task

Run one paid data capability (company data, people and contact data and the like) through Ahel's provider execution: it is quoted, the exact price is reserved from the workspace balance, and the run starts. Give id, a task id or tool id from capability_search: it runs only through the v2 capability Ahel's task map binds to it, and an item that is not ready is refused with its exact reason before anything is quoted. It then waits up to wait_seconds (default 20, at most 50; 0 answers at once): when the run finishes in that time, this same answer has its state, exact cost and rows, and generated images and audio as links; otherwise it answers the execution id, and capability_run_status reads the run. Data collection only: a capability that writes or has a side effect is refused. Ahel picks the provider unless endpoint_ids pins one; exclude_endpoint_ids leaves providers out. Give max_cost_usd to hold the price: a run that would cost more is refused with nothing run or charged. Give idempotency_key so a retry after a lost answer is safe: the same key answers the same run, with no new charge. Give tag (such as a customer name) to see usage and cost by tag in Activity. A list: for people.email.find or companies.register.search or companies.emails.from_website, give rows (objects) or rows_text (paste up to 100 rows as text) instead of arguments: without confirm it answers the list's quote and runs nothing; with confirm true it runs every row once and answers the receipt (found, not found, failed, the exact total, the rows and a CSV link) and its run_id; run_id continues a run whose rows were still going. NOT for: the team's own tools, which is my_tools.

Input parameters:

- `arguments` (object): The capability's inputs, by name. Required unless rows, rows_text or run_id is given; with a list, {"verify": true} checks every found email.
- `capability_id` (string): Instead of id: a v2 capability id from capability_run_status (no execution_id).
- `confirm` (boolean): With rows or rows_text: true runs the list once the person agrees to its quote. Left out, the answer is the quote and nothing runs.
- `endpoint_ids` (array): Optional: run only on these providers, by the endpoint ids capability_inspect lists. Leave it out to let Ahel pick (the default).
- `exclude_endpoint_ids` (array): Optional: never use these providers, by the endpoint ids capability_inspect lists. Ahel picks among the rest.
- `id` (string): A task id or tool id from capability_search or capability_inspect.
- `idempotency_key` (string): Optional: your own key for this run, 8 to 200 letters, digits, dots, underscores, colons or hyphens. Sending the same call again with the same key answers the same run with no new charge; the same ke…
- `max_cost_usd` (string): Optional: the most this run may cost, in USD, such as "0.05". capability_inspect's next names the quoted maximum. Ahel uses only providers that fit under it, and when none does the run is refused wit…
- `max_items` (number): Most rows to collect, 1-100. Default 10.
- `rows` (array): A list for people.email.find or companies.register.search or companies.emails.from_website: 1 to 100 rows, each run once as its own run with its own exact cost. One object per row, such as {"name": "…
- `rows_text` (string): A list for people.email.find or companies.register.search or companies.emails.from_website: 1 to 100 rows, each run once as its own run with its own exact cost. Instead of rows: paste up to 100 rows…
- `run_id` (string): With id: the run_id a list's receipt answered, to read its rows still running and start the rest. Rows already run are never run twice.
- `tag` (string): Optional: a label for this run, such as the customer or project it is for: 1 to 64 lowercase letters, digits, dots, dashes or underscores. Activity shows runs and cost by tag. It stays in Ahel and is…
- `timeout_seconds` (number): Longest the run may take, 1-180 seconds. Default: the provider's own (60, more for slow sources).
- `wait_seconds` (number): Optional: how long to wait for the run to finish and answer its rows here, 0-50 seconds. Default 20; 0 answers the execution id at once. A list waits up to 45 s.

### `capability_run_status` (~334 tokens)

Read a run's status and results

Without execution_id: the paid data capabilities this workspace can run, each with its providers and exact prices. With execution_id: that run's state, attempts and exact cost, settled once in the ledger when final; with results true, its rows and provenance (include_raw true adds the provider's own answer). Generated images and audio come as a signed link (media_url, valid for days) with their type and size; a small one is also attached as an image or audio block. A long result answers as many rows as fit and says the offset that reads the rest. NOT for: finding a task or tool to run, which is capability_search.

Input parameters:

- `execution_id` (string): The id run_capability answered.
- `full_text` (boolean): With results: answer long text values whole. By default a result of several rows cuts each text value at 4000 characters and lists the cut fields in that row's truncated_fields.
- `include_raw` (boolean): With results: also include the winning provider's own answer (raw) and the normalised output. Large and repeats the rows; leave it out unless the rows lack a field you need.
- `max_items` (number): With results: the max_items the run was started with, so the answer can say when the rows stopped at that limit. run_capability's next names it.
- `offset` (number): With results: the first row to answer (0-based), from next_offset when a long result did not fit in one answer. Default 0.
- `results` (boolean): With execution_id: include the rows.

### `catalog_request` (~180 tokens)

Request a missing task or tool

Ask Ahel to add a data task or provider tool the catalog does not have yet: call it when capability_search answers verdict none and none of its nearest items fits. Give what you need in plain words, an example input, and the most you would pay for one call. Answers a request id; asking again for the same thing adds to that request instead of making a new one. Free; runs nothing and charges nothing. NOT for: finding what already exists, which is capability_search.

Input parameters:

- `example_input`: Optional: one example input, as text or an object (a domain, a profile URL, a name).
- `max_price_usd` (number): Optional: the most you would pay for one call, in USD.
- `what` (string, required): What you need done, in plain words: the job, not a provider name.

### `feedback` (~215 tokens)

Rate a run or report a problem

Rate one run or one catalog request of this workspace good or bad, or, with no id, report anything about Ahel: confusing results or charges, unclear instructions, unhelpful errors, a workaround you needed. Report small annoyances too, even when the task succeeded, each issue once. Ahel reads every note to fix providers and the catalog. Leave out private information, keys and raw responses. Free; changes nothing else. NOT for: reading a run's state or rows, which is capability_run_status, or asking for a missing task, which is catalog_request.

Input parameters:

- `category` (string): With no id: quality (results), pricing (charges or prices), friction (using Ahel) or other.
- `id` (string): To rate one: an execution id from run_capability, or a request id from catalog_request.
- `note` (string): What was right or wrong, in a sentence or two. Required with no id.
- `rating` (string): With id: good or bad.

### `balance` (~94 tokens)

Read the prepaid balance

The workspace's prepaid balance in USD, what runs in flight hold, what settled runs used today and this month (shown to the Owner), any daily spend cap on the team API key this connection uses, and where to top up. Check it when a run is refused for funds, or before a job that will make many runs. Free; changes nothing. NOT for: the price of one run, which is capability_inspect.

### `review` (~163 tokens)

Review a run's usefulness

Rate how useful one finished run of this workspace was, after you have used its result: useful, partly, not_useful, or not_sure when you cannot tell, with an optional reason about the result (missing rows, wrong data, stale). One review per run; reviewing it again replaces the earlier one. Ahel reads every review to rank and fix providers. Leave out private information, keys and raw rows. Free; changes nothing else. NOT for: a catalog request, or reporting something confusing or broken, which is feedback.

Input parameters:

- `reason` (string): Optional: why, in a sentence or two, about the result.
- `run_id` (string, required): The execution id run_capability answered.
- `usefulness` (string, required): How useful the result was.

### `get_started` (~94 tokens)

Get started with Ahel

How to start with Ahel: call this when the person asks what Ahel is, what it can do or how to begin. Returns what Ahel is, how the prepaid balance works, the three steps to find, price and run any data task or provider tool, and ready example prompts. Reads only; changes nothing. NOT for: finding a data task or provider tool for a specific ask, which is capability_search.

## Diagnostics

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

## Score history

- 2026-11-05: 81
- 2026-11-04: 81
- 2026-11-03: 82
- 2026-11-02: 82
- 2026-11-01: 40
- 2026-10-31: 40

## Common questions

### What is the Ahel MCP server?

Ahel is an MCP server listed in the public MCP registry as ai.ahel/ahel. Data and tools for your AI agent: company, people, SEO, social and EU register data. Pay per call. This page covers its hosted endpoint (https://mcp.ahel.ai).

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

Ahel scores 81 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 Ahel MCP server expose?

Ahel exposes 10 tools: my_tools, capability_search, capability_inspect, run_capability, capability_run_status, and 5 more. Their descriptions and schemas cost roughly 3,199 tokens of context every time the server is loaded.

### Does the Ahel MCP server require authentication?

Yes. Ahel 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 Ahel MCP server still maintained?

Ahel 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.ahel.ai/
- Repository: https://github.com/ahel-technologies/ahel
- Website: https://ahel.ai/
- Changelog RSS feed: https://verifymcp.io/servers/ai-ahel-ahel/mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/ai-ahel-ahel/mcp.json
- HTML version of this page: https://verifymcp.io/servers/ai-ahel-ahel/mcp
