# AstraNL (remote · astranl.com)

NL coordination protocol — 1% fee, agent-native, real Dutch merchant pricing. Open brain.

- Trust score: 57/100 (low)
- Change this week: +2
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- remote · `astranl.com`: 57/100 (this document), [markdown](https://verifymcp.io/servers/com-astranl-mcp/astranl.md), [page](https://verifymcp.io/servers/com-astranl-mcp/astranl)

## Channel facts

- Endpoint: `https://astranl.com/mcp/sse`
- Transports: `sse`
- Auth: `none`
- Version: `1.32.4`

## 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-08-03.

- **Endpoint Security**: 57/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation not fully verified: no authorisation is required to call this server, and 10 tool(s) never declared a destructiveHint. The MCP spec treats an absent hint as destructive by default, so we cannot call this surface safe.
  - HTTPS is enforced; there's no plaintext access path.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 40/100
  - Verified sse transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 59/100
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 2715 tokens (~169/item across 16 items; 16 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 89/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 67% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add --transport http com-astranl-mcp https://astranl.com/mcp/sse
```

### Codex

```toml
[mcp_servers.com-astranl-mcp]
url = "https://astranl.com/mcp/sse"
```

### opencode

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

### OpenClaw

```bash
openclaw mcp add com-astranl-mcp --url https://astranl.com/mcp/sse --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  com-astranl-mcp:
    url: "https://astranl.com/mcp/sse"
```

### Other

```json
{
  "mcpServers": {
    "com-astranl-mcp": {
      "type": "http",
      "url": "https://astranl.com/mcp/sse"
    }
  }
}
```

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-08-03 (score 57, +1)

No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-08-02 (score 56, +1)

- [functional] New tool “report_shortage”

### 2026-08-01 (score 55, +1)

No change was recorded against any check on this day. Stability & Change Management went from 17 to 20. That category is still filling its 30-day observation window: 5 days of observed history at the previous scan, 6 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-31 (score 54, +1)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 53, +4)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-29 (score 49, −6)

- [security] Tool “search_robots” rewrote its description, which is the text the model reads
- [functional regression] Schema quality: 1821 → 2217
- [functional] Schema quality: good → poor
- [functional] New tool “shared_context”
- [functional] New tool “action_status”
- [functional] New tool “mandate”

### 2026-07-27 (score 55, 0)

- [security] Tool “compose_parts_basket” rewrote its description, which is the text the model reads
- [security] Tool “report_order_exception” rewrote its description, which is the text the model reads
- [functional improvement] Stability: unverified → 0.03
- [functional] Schema quality: excellent → good
- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server
- [functional] New tool “get_execution_packet”
- [cosmetic] “compose_parts_basket” added an optional parameter “task_id”

### 2026-07-26 (score 55)

First indexed and scored.

## MCP tools (16)

### `technics_coordination` (~272 tokens)

Coordinate the PURCHASE of a vehicle or machine in the Netherlands: cars, vans, trucks, trailers, excavators, loaders, lifts, generators, tools, agricultural machines. Give the buyer's requirements and AstraNL finds registered sellers, requests offers, and returns a ranked shortlist with a written reason per option. Package services can be added: registration, insurance, warranty, pre-purchase inspection, transport, financing, trade-in. The buyer signs directly with the seller; AstraNL holds no funds and charges 0% until 31 Aug 2026, then 1% of the agreed price on a completed purchase only. Search results are ephemeral by design; the accompaniment around the decision is the product.

Input parameters:

- `brand` (string)
- `budget_max_eur` (integer)
- `budget_min_eur` (integer)
- `finance` (string): cash, lease, loan, unsure
- `kind` (string, required): car, van, truck, trailer, excavator, loader, lift, scaffold, generator, compressor, welder, tools, agri, other
- `model` (string)
- `notes` (string)
- `packages` (array)
- `region` (string): Dutch city or province
- `usage_type` (string): private or business

### `shared_context` (~99 tokens)

READ THIS FIRST. The single shared brief every AstraNL agent and chat starts from: live system state, work currently in flight (so you never repeat or duplicate an action), recent decisions and lessons, guard status, canonical documents, what is waiting for the founder, and the honest known gaps. Article 91: if an action hash is already done or in flight, do NOT repeat it; if a claim was abandoned half-way, FINISH it.

### `mandate` (~212 tokens)

Article 93 completion contract. A founder task is ONE COMPLETE PROCESS: open it as a mandate with its full checklist (derived steps backup/syntax/verify/regression/journal/lesson are added automatically), close each item ONLY with proof, add any sub-task discovered mid-work to the SAME mandate, and close the mandate at the end. Closing is REFUSED while anything is open - that refusal means finish it now, do not report it. actions: open | add | done | blocked | status | close

Input parameters:

- `action` (string): open|add|done|blocked|status|close
- `artifact` (string): prepared artifact path (for blocked)
- `item` (string): item text or fragment
- `items` (array): explicit checklist items (for open)
- `mandate` (string): the founder task text (for open)
- `mandate_id` (integer)
- `proof` (string): command output / http code / file path / test result
- `reason` (string)

### `action_status` (~82 tokens)

Idempotency gate: ask whether a specific action was already completed, is running now, failed before, or was abandoned half-done. Same logical action always hashes to the same answer for every caller, so two agents cannot duplicate work.

Input parameters:

- `kind` (string, required): action kind, e.g. publish_page
- `target` (string): optional target id/path

### `get_execution_packet` (~92 tokens)

Fetch the canonical Execution Packet for an AstraNL task id: desired outcome, category/location/budget, price band, execution paths, evidence expectations, economics, and an HONEST list of unknowns and open questions (nothing is invented; synthetic tasks are flagged). One packet shape for tasker, tender and basket consumers - packet_version 1.0.

Input parameters:

- `task_id` (integer, required): AstraNL task id

### `compose_parts_basket` (~260 tokens)

Compose a COMPLETE, brand- and size-compatible purchase list (inkooplijst) for a physical job in the Netherlands - every fitting, adapter, end cap and small part professionals usually forget. Asks up to 3 clarifying questions when a critical spec (diameter, brand, amperage, substrate) is unknown; pass their answers via the answers array. Honest: stock availability is 'unverified' with per-shop search links until merchant feeds are live. Use before ordering materials for any montage/service job (heating, electrical, plumbing, tiling, garden, solar). Follow up with create_task to have AstraNL coordinate procurement and delivery; payment terms are shown before consent.

Input parameters:

- `answers` (array): Answers to previously returned clarifying questions, in order
- `description` (string, required): Job in plain words incl. known brands/sizes, e.g. 'vloerverwarming 20m2 aansluiten op cv, Henco 16mm'
- `lang` (string): nl|en|uk|pl|de|fr|es|tr|ar|ro
- `task_id` (integer): Optional AstraNL task id - basket is enriched from its Execution Packet (location/category/budget; unknowns stay unknown)

### `report_shortage` (~226 tokens)

SHORTAGE CHANNEL from the werkvloer: a worker on a Dutch construction/installation site reports that material is running out (text, voice transcript, or optionally a photo as base64). Returns the COMPLETE compatible restock list (incl. forgotten small parts) with HONEST per-line availability: feed_in_stock (live merchant feed) / price_verified_stock_unknown / unverified. Never invents stock. Follow up with place_basket_order to have it delivered to the project address; pass project_ref for the company's cost administration.

Input parameters:

- `answers` (array)
- `image_b64` (string): Optional photo (base64, max ~6MB) of the item/packaging
- `lang` (string): nl|en|uk|pl|de|fr|es|tr|ar|ro
- `media_type` (string): image/jpeg | image/png | image/webp
- `project_ref` (string): Project number / cost code for bookkeeping
- `text` (string): What is running out, plain words incl. brand/size if known

### `place_basket_order` (~179 tokens)

Place a real order for a composed parts list with DELIVERY to a street address at a preferred moment (AstraNL Article 87). Use AFTER compose_parts_basket: pass its onderdelen as custom_items. Creates a coordination order + task; the human coordinator confirms availability, delivery cost and payment BEFORE any purchase (no money is charged by this call). Returns order_id, task_id and status_url. Rate limit: 5 orders/hour/IP.

Input parameters:

- `address` (string, required): street + number
- `city` (string, required)
- `contact` (string, required): email or phone for confirmation
- `custom_items` (array, required)
- `lang` (string)
- `name` (string): recipient name
- `postcode` (string)
- `when` (string): preferred delivery moment, e.g. 'vr 9-12'

### `check_basket_order` (~53 tokens)

Check status of a basket order placed via place_basket_order. Pass the order_id (SHOP-XXXX). Returns order_status, task_id/task_status. No PII.

Input parameters:

- `order_id` (string, required)

### `report_order_exception` (~105 tokens)

Report a return (retour), delivery shortage (tekort) or damage (schade) on a coordinated order. AstraNL takes over coordination with the merchant under the merchant's own return/delivery terms; any held payment stays paused until resolution is confirmed. Zero routine for merchant and client.

Input parameters:

- `items` (array)
- `partner_slug` (string)
- `reason` (string, required)
- `task_id` (integer)
- `type` (string, required)

### `create_task` (~364 tokens)

Create a real-world physical-services task on AstraNL — a coordination protocol for the Netherlands (KvK 88449335). AstraNL matches the task to verified providers and returns a task_id. Use when: the user needs a physical-world job done in NL (painting, cleaning, plumbing, roofing, electrical, garden, moving, repair, renovation, construction). Always confirm location and budget before calling. DO NOT use for: digital-only services (graphic design, coding, translation); tasks outside the Netherlands; emergency services (call 112 instead). Side effects: persists task in AstraNL economy.db; triggers matching engine which may notify providers via email/SMS within minutes; user becomes responsible for the task fee (1% of budget) once a provider accepts. Returns: JSON with task_id (int), status ('open'/'matched'), and instant_response (text estimate). Auth: server-side X-Agent-Key handled internally. Rate-limited to 10 calls per minute per IP at the API gateway.

Input parameters:

- `budget` (number): Target budget in EUR (excl. BTW). Optional but strongly recommended — omitting reduces match quality. Range typically 30–5000.
- `category` (string, required): One of the supported physical-service categories. Choose the closest match — if unsure, prefer 'repair' as catch-all.
- `description` (string): Free-form details: dimensions, materials, timing, access notes. The more specific, the better the match.
- `location` (string, required): City in the Netherlands. Examples: 'Amsterdam', 'Rotterdam', 'Utrecht'. AstraNL only operates in NL.
- `title` (string, required): Short one-line summary, 5–80 characters. Example: 'Paint living room ceiling, 18 m2'.

### `check_task` (~172 tokens)

Look up the current status of a previously created AstraNL task by its numeric task_id. Use when: a user asks 'what happened with task #N', after create_task to confirm matching, or when polling for status changes. DO NOT use for: enumerating all tasks (no listing endpoint is exposed via MCP); checking other users' tasks (the API only returns tasks owned by the calling agent). Side effects: none, read-only. Returns JSON with task fields: id, title, category, status ('open' | 'matched' | 'in_progress' | 'completed' | 'cancelled' | 'disputed'), provider info if matched, created_at, updated_at. Idempotent.

Input parameters:

- `task_id` (integer, required): Numeric task identifier returned by create_task. Must be a positive integer.

### `search_robots` (~205 tokens)

Search the AstraNL Robot Index for robots capable of performing a given task type. The index covers the source-verified catalog of commercial and pilot-stage robots across 11 categories: humanoid industrial/consumer, cobots, industrial arms, AMRs, quadrupeds, service bots, commercial drones, agricultural drones. Use when: comparing automation options, evaluating cost vs human labor, exploring what robotic capabilities exist for a domain. DO NOT use for: real-time robot booking (most listed are manufacturers, not rental services); navigation or control of a specific robot; tasks unrelated to physical-world capabilities. Side effects: none, read-only against the public Robot Index. Returns JSON list of matching robots with manufacturer, specs, payload range, indicative price, production status. Idempotent.

Input parameters:

- `task_type` (string, required): Free-text task description. The matcher uses semantic and category-based matching. Examples: 'painting walls', 'warehouse picking', 'agricultural spraying', 'inspection'.

### `estimate_cost` (~256 tokens)

Estimate the cost of a task in EUR based on AstraNL's historical pricing data, with a side-by-side comparison of human-provider vs robot-automation cost. Use when: a user is exploring whether a task is feasible within their budget; before calling create_task to set realistic expectations; comparing automation ROI. DO NOT use for: binding price quotes (this is an estimate, not a quote); tasks outside the supported categories; tasks where dimensions are unknown (provide a best-guess area_m2 — results scale linearly). Side effects: none, read-only against pricing dataset. Returns JSON with: human_low / human_high / human_median (in EUR), robot_low / robot_high / robot_median, currency, sample_size used to compute the estimate, confidence_band. Idempotent for the same inputs.

Input parameters:

- `area_m2` (number): Surface area or working volume in square meters. Optional but improves accuracy. For non-area tasks (e.g. plumbing repair) pass 0 or omit.
- `category` (string, required): Service category. Same enum as create_task.
- `location` (string): City in the Netherlands. Pricing varies by region (Amsterdam tends to be highest). Optional — omitting uses national median.

### `search` (~75 tokens)

Search AstraNL coordination data (robots registry, service categories, and merchant parts by keyword). Returns a list of results, each with an id and a short title/snippet, for use with the fetch tool. Read-only. This is the generic discovery entry point expected by agent frameworks.

Input parameters:

- `query` (string, required): Free-text search query.

### `fetch` (~63 tokens)

Fetch the full record for a single result id returned by search (robot passport, category detail, or merchant SKU). Read-only.

Input parameters:

- `id` (string, required): Result id from search (e.g. robot:DJI-Matrice, sku:16759:Green-flor).

## Diagnostics

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

## Score history

- 2026-08-03: 57
- 2026-08-02: 56
- 2026-08-01: 55
- 2026-07-31: 54
- 2026-07-30: 53
- 2026-07-29: 49
- 2026-07-28: 55
- 2026-07-27: 55
- 2026-07-26: 55

## Links

- Remote endpoint: https://astranl.com/mcp/sse
- Repository: https://github.com/astranl/astranl-mcp
- Website: https://astranl.com/
- Changelog RSS feed: https://verifymcp.io/servers/com-astranl-mcp/astranl/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/com-astranl-mcp/astranl/changelog.json
- HTML version of this page: https://verifymcp.io/servers/com-astranl-mcp/astranl
