Skip to main content

Lean API Platform -- Token-efficient API specs for AI agents

Project description

LAP — Lean API Platform

Lean API Platform

Agent-Native API specs. Verified, compressed, ready to install.

PyPI Tests npm
Claude Code Skill OpenClaw Skill Cursor Rules
PRs Welcome Star this repo
APIs in Registry

Website · Registry · Benchmarks · Docs

Request a Spec · Report a Bug · Request a Feature


Without API documentation, LLM agents hallucinate endpoints, invent parameters, and guess auth flows -- scoring just 0.399 accuracy in blind tests.

LAP fixes this. One command gives your agent a verified, agent-native API spec -- jumping accuracy to 0.860. And because LAP specs are up to 10x smaller than raw OpenAPI, you also save 35% on cost and run 29% faster.

Not minification -- a purpose-built compiler with its own grammar.

Proven in 500 blind runs across 50 APIs

88% fewer tokens, 35% lower cost, same accuracy

LAP Lean scored 0.851 (vs 0.825 raw) while using 35% less cost and 29% less time -- same accuracy, far fewer tokens.

Full benchmark report (500 runs, 50 specs, 5 formats) · Benchmark methodology and data

Quick Start

# Set up LAP in your IDE
npx @lap-platform/lapsh init                    # Claude Code
npx @lap-platform/lapsh init --target cursor    # Cursor

# Search the registry for an API
npx @lap-platform/lapsh search payment

# Download a spec
npx @lap-platform/lapsh get stripe-com -o stripe.lap


# Install an API skill
npx @lap-platform/lapsh skill-install stripe-com

# Or compile your own spec
npx @lap-platform/lapsh compile api.yaml --lean

Use as an Agent Skill

Install the LAP skill so your agent can search, compile, and manage APIs automatically:

Claude Code:

npx @lap-platform/lapsh init

Cursor:

npx @lap-platform/lapsh init --target cursor

OpenClaw: install from ClawHub or copy manually:

cp -r skills/lap ~/.openclaw/skills/lap

Once installed, agents auto-trigger the skill when working with APIs -- or invoke it directly with /lap. You can also install individual API skills for specific integrations:

npx @lap-platform/lapsh skill-install stripe-com
# Agent now knows the full Stripe API

Want to get listed? Register as a verified publisher and share your specs and skills with the registry.

# Install globally (npm or pip)
npm install -g @lap-platform/lapsh
pip install lapsh

What You Get

  • 📦 Registry — browse and install 1500+ pre-compiled specs at lap.sh
  • 🗜️ 5.2× median compression on OpenAPI, up to 39.6× on large specs — 35% cheaper, 29% faster (benchmarks)
  • 📐 Typed contractsenum(a|b|c), str(uuid), int=10 prevent agent hallucination
  • 🔌 6 input formats — OpenAPI, GraphQL, AsyncAPI, Protobuf, Postman, Smithy
  • 🎯 Zero information loss — every endpoint, param, and type constraint preserved
  • 🔁 Round-trip — convert back to OpenAPI with lapsh convert
  • 🤖 Skill generationlapsh skill creates agent-ready skills from any spec
  • 🔗 Integrations — LangChain, Context Hub, Python/TypeScript SDKs

How It Works

How LAP works — 5 compression stages

Five compression stages, each targeting a different source of token waste:

Stage What it does Savings
Structural removal Strip YAML scaffolding — paths:, requestBody:, schema: wrappers vanish ~30%
Directive grammar @directives replace nested structures with flat, single-line declarations ~25%
Type compression type: string, format: uuidstr(uuid) ~10%
Redundancy elimination Shared fields extracted once via @common_fields and @type ~20%
Lean mode Strip descriptions — LLMs infer meaning from well-named parameters ~15%

LAP CLI demo

Benchmarks

1,500+ specs · 5,228 endpoints · 4.37M → 423K tokens

Compression by API format

Format Specs Median Best
OpenAPI 30 5.2× 39.6×
Postman 36 4.1× 24.9×
Protobuf 35 1.5× 60.1×
AsyncAPI 31 1.4× 39.1×
GraphQL 30 1.3× 40.9×

Verbose formats compress most — they carry the most structural overhead. Already-concise formats like GraphQL still benefit from type deduplication.

The Ecosystem

LAP is more than a compiler:

Component What Command
Init Set up LAP in your IDE lapsh init --target claude
Search Find APIs in the registry lapsh search payment
Get Download a spec by name lapsh get stripe-com
Skill Install Install an API skill lapsh skill-install stripe-com --target claude
Check Check installed skills for updates lapsh check [--target claude|cursor]
Diff Compare installed skill vs registry lapsh diff stripe-com
Pin / Unpin Skip or resume update checks lapsh pin stripe-com
Compiler Any spec → .lap lapsh compile api.yaml
Skill Generator Create agent-ready skills from any spec lapsh skill api.yaml --install
API Differ Detect breaking API changes lapsh diff old.lap new.lap
Round-trip Convert LAP back to OpenAPI lapsh convert api.lap -f openapi
Publish Share specs to the registry lapsh publish api.yaml --provider acme

Claude Code & Cursor: The lap skill is included -- run lapsh init and your agent can search, install, and auto-check for API skill updates directly.

Supported Formats

lapsh compile  api.yaml           # OpenAPI 3.x / Swagger
lapsh compile  schema.graphql     # GraphQL SDL
lapsh compile  events.yaml        # AsyncAPI
lapsh compile  service.proto      # Protobuf / gRPC
lapsh compile  collection.json    # Postman v2.1
lapsh compile  model.smithy       # AWS Smithy

Format is auto-detected. Override with -f openapi|graphql|asyncapi|protobuf|postman|smithy.

Top Compressions

Top 15 OpenAPI APIs by compression ratio

Integrations

# LangChain
from lap.middleware import LAPDocLoader
docs = LAPDocLoader("stripe.lap").load()

LangChain, Context Hub, and Python/TypeScript SDKs. See integration docs.

FAQ

Why do agents hallucinate API calls?

Because they have no way to find the spec, and even if they could, it's a million tokens of YAML written for humans. Agents without specs score 0.399 accuracy -- wrong 60% of the time. They hallucinate endpoint paths, send invalid types, and miss auth. Give them a LAP spec and accuracy jumps to 0.860. The spec doesn't make the agent smarter. It makes guessing unnecessary.

How is this different from OpenAPI?

LAP doesn't replace OpenAPI — it compiles FROM it. Like TypeScript → JavaScript: you keep your OpenAPI specs, your existing tooling, everything. LAP adds a compilation step for the LLM runtime.

How is this different from MCP?

MCP defines how agents discover and invoke tools (the plumbing). LAP compresses the documentation those tools expose (the payload). They're complementary — LAP can compress MCP tool schemas.

Why not just minify the JSON?

Minification removes whitespace — that's ~10% savings. LAP performs semantic compression: flattening nested structures, deduplicating schemas, compressing type declarations, and stripping structural overhead. That's 5-40× savings. Different class of tool.

What about prompt caching?

Use both. Compress with LAP first, then cache the compressed version. LAP reduces the first-call cost and frees context window space. Caching reduces repeated-call cost. They stack.

Will LLMs understand this format?

Yes. LAP uses conventions LLMs already know — @directive syntax, {name: type} notation, HTTP methods and paths. In blind tests, agents produce identical correct output from LAP and raw OpenAPI. The typed contracts actually reduce hallucination.

What if token costs keep dropping?

Cost is the least important argument. The core value is typed contracts: enum(succeeded|pending|failed) prevents hallucinated values regardless of token price. Plus: formal grammar (parseable by code, not just LLMs), schema diffing, and faster inference from fewer input tokens.

Contributing

See CONTRIBUTING.md. CI runs on every push and PR -- Python 3.11/3.12 and Node 18/20.

Python (18 test files, 1,083 tests):

Suite What it covers
Compilers OpenAPI, GraphQL, AsyncAPI, Protobuf, Postman, Smithy
Round-trip Compile → parse → re-emit across 190+ specs
Skill & Tool Skill compiler, tool format, MCP manifest, skill updates
Agent Agent implementation verification (enum, nested, array handling)
Differ Breaking change detection, compatibility checking
CLI Auth, search, version, integration (subprocess)
Quality Regression tests for compiler bug fixes

TypeScript SDK (14 test files -- full compiler parity):

Suite What it covers
Compilers OpenAPI, GraphQL, AsyncAPI, Protobuf, Postman, Smithy, AWS SDK
Parser & Serializer LAP text round-trip in TypeScript
Skills Skill compilation, LLM integration
CLI & Auth CLI commands, credential management
Search Registry search helpers
git clone https://github.com/Lap-Platform/lap.git
cd lap

# Python tests
pip install -e ".[dev]"
pytest

# TypeScript SDK tests
cd sdks/typescript
npm ci && npm test

License

Apache 2.0 — See NOTICE for attribution.


lap.sh · Built by the LAP team

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lapsh-0.6.1.tar.gz (165.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

lapsh-0.6.1-py3-none-any.whl (114.6 kB view details)

Uploaded Python 3

File details

Details for the file lapsh-0.6.1.tar.gz.

File metadata

  • Download URL: lapsh-0.6.1.tar.gz
  • Upload date:
  • Size: 165.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for lapsh-0.6.1.tar.gz
Algorithm Hash digest
SHA256 dc7b517e4fef473701ac41f92698bc37ad773e3db93602b47565a713cdc1b09c
MD5 6ea24b1f134e28a11e0c2cfaf2021356
BLAKE2b-256 4bff9d159289b78c6b2970f62d44701bfc89fc14203e08250125547a9286b0c5

See more details on using hashes here.

Provenance

The following attestation bundles were made for lapsh-0.6.1.tar.gz:

Publisher: publish-pypi.yml on Lap-Platform/LAP

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file lapsh-0.6.1-py3-none-any.whl.

File metadata

  • Download URL: lapsh-0.6.1-py3-none-any.whl
  • Upload date:
  • Size: 114.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for lapsh-0.6.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a3d93da99607826deb877f578f78263a515718d2f543efc8fecfb668cad176c2
MD5 cafb4fa7011fabb5d29d4b5094cba6a9
BLAKE2b-256 22271bf467fc330d5cc53565634c79786e20513ffd38b36ab1d8aafa1e4dc124

See more details on using hashes here.

Provenance

The following attestation bundles were made for lapsh-0.6.1-py3-none-any.whl:

Publisher: publish-pypi.yml on Lap-Platform/LAP

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page