Skip to content

DADL

DADL (Dunkel API Description Language) is a YAML format that describes REST APIs declaratively as MCP tools. It eliminates the need to build dedicated MCP servers for each API.

Before: Claude → ToolMesh → MCP Server → REST API
With DADL: Claude → ToolMesh → REST API (via .dadl file)

For every REST API, developers today build a dedicated MCP server — hundreds of Node.js/Python projects on GitHub that all repeat the same pattern: HTTP client + JSON schema + tool registration. A MCP server is structurally always a subset of the API it wraps.

DADL replaces this with a single YAML file.

DADL files are not written by hand — they are generated by LLMs. A prompt like “Create a DADL for the Hetzner Cloud API — server list, create, delete, and power actions” is enough. This makes DADL the first API description format that is AI-native created and AI-native consumed.

Visit dadl.ai for the full specification, registry, and how-to guides.

FieldRequiredDescription
specyesURL of the DADL specification
backend.nameyesUnique backend identifier (slug)
backend.typeyesAlways rest
backend.base_urlyesBase URL for API requests
backend.authyesAuthentication configuration
backend.toolsyesMap of tool definitions
backend.defaultsnoDefault headers, pagination, errors, response
backend.typesnoType definitions (JSON Schema subset)
backend.compositesnoServer-side multi-endpoint tools
TypeDescription
bearerToken in Authorization header
basicBase64-encoded username:password
oauth2Client credentials flow with token caching
sessionLogin → extract token → inject on requests → auto-refresh
api_keyKey in header or query parameter
StrategyDescription
cursorCursor-based (Stripe, Slack)
offsetOffset-based
pagePage number-based
link_headerRFC 8288 Link Header (GitHub)

Pagination is auto by default — ToolMesh fetches all pages transparently. With expose, the LLM controls pagination via Code Mode.

  • result_path — JSONPath to extract the relevant part
  • transform — jq filter for reduction/restructuring
  • max_items — array truncation against context overflow
  • allow_jq_override — LLM can pass ad-hoc filters

Server-side TypeScript for multi-endpoint orchestration:

  • Access to api.* (all tools of the backend) and params (input)
  • Sandboxed: no fetch(), no require(), no filesystem access
  • Max 50 api.* calls per execution, 120s timeout
  • Each internal call is individually recorded in the audit trail
spec: "https://dadl.ai/spec/dadl-spec-v0.1.md"
backend:
name: github
type: rest
base_url: https://api.github.com
auth:
type: bearer
credential: github_token
defaults:
headers:
Accept: application/vnd.github+json
pagination:
strategy: link_header
mode: auto
tools:
list_repos:
method: GET
path: /user/repos
description: "List repositories for the authenticated user"
params:
sort:
type: string
enum: [created, updated, pushed, full_name]