{
  "markdown": "# Strale\n\nTrust and quality infrastructure for AI agents.\n\n[![strale MCP server](https://glama.ai/mcp/servers/strale-io/strale/badges/card.svg)](https://glama.ai/mcp/servers/strale-io/strale)\n\n[![npm](https://img.shields.io/npm/v/strale-mcp?label=strale-mcp)](https://www.npmjs.com/package/strale-mcp)\n[![npm](https://img.shields.io/npm/v/straleio?label=straleio)](https://www.npmjs.com/package/straleio)\n[![PyPI](https://img.shields.io/pypi/v/straleio?label=straleio%20PyPI)](https://pypi.org/project/straleio/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n[![strale.dev](https://img.shields.io/badge/strale.dev-live-green)](https://strale.dev)\n\n## What Strale is\n\nStrale is a capability marketplace for AI agents. Agents call `strale.do()`\nat runtime to reach verified capabilities — company registry lookups,\ncompliance checks, financial validation, Web3 security, and more — plus\nbundled solutions for multi-step workflows like a full KYB check or company\ndue diligence, instead of the agent's own code hardcoding integrations and\nmanaging credentials for every data source it might need.\n\nEvery capability is watched: free-tier capabilities are tested against real\nupstreams on a schedule, paid capabilities are watched through production\nobservability and an enforced quality floor, and every call returns a\nstructured, auditable result with source provenance. The current catalog,\nfree-tier list, and country coverage are live values, not numbers printed\nhere — see [How to use it](#how-to-use-it) below for where to read them.\n\n## How to use it\n\n### MCP server (recommended: no install)\n\n```json\n{\n  \"mcpServers\": {\n    \"strale\": {\n      \"type\": \"streamableHttp\",\n      \"url\": \"https://api.strale.io/mcp\",\n      \"headers\": {\n        \"Authorization\": \"Bearer sk_live_your_key_here\"\n      }\n    }\n  }\n}\n```\n\nWorks with Claude Desktop, Claude Code, Cursor, and any MCP client\nsupporting Streamable HTTP. For local stdio instead, or the full tool\nsurface, see [`packages/mcp-server/README.md`](packages/mcp-server/README.md).\n\n### TypeScript SDK\n\n```bash\nnpm install straleio\n```\n\n```typescript\nimport Strale from \"straleio\";\n\nconst strale = new Strale({ apiKey: process.env.STRALE_API_KEY });\nconst result = await strale.do(\"eu-vat-validate\", { vat_number: \"SE556000000001\" });\n```\n\nFull reference: [`packages/sdk-typescript/README.md`](packages/sdk-typescript/README.md).\n\n### Python SDK\n\n```bash\npip install straleio\n```\n\n```python\nfrom straleio import Strale\n\nstrale = Strale(api_key=\"your_api_key\")\nresult = strale.do(\"eu-vat-validate\", {\"vat_number\": \"SE556000000001\"})\n```\n\nFull reference: [`packages/sdk-python/README.md`](packages/sdk-python/README.md).\n\n### Get started without an API key\n\nA subset of capabilities (email/IBAN/crypto-address validation, DNS lookup,\nJSON repair, URL-to-markdown, and more) work with no signup, no API key, and\nno wallet — only an IP-based daily rate limit. Read the current list from\n`GET /v1/platform/facts` (`free_tier_slugs`), not from a number in this\nfile. Get a key and trial credits at [strale.dev](https://strale.dev) when\nyou need the rest of the catalog.\n\n### Framework integrations\n\n| Package | Registry | Description |\n| --- | --- | --- |\n| [`strale-mcp`](https://www.npmjs.com/package/strale-mcp) | npm | MCP server — the full capability catalog via Claude, Cursor, any MCP host |\n| [`straleio`](https://www.npmjs.com/package/straleio) | npm | TypeScript/JavaScript SDK |\n| [`straleio`](https://pypi.org/project/straleio/) | PyPI | Python SDK |\n| [`langchain-strale`](https://pypi.org/project/langchain-strale/) | PyPI | LangChain toolkit (`StraleToolkit`) |\n| [`crewai-strale`](https://pypi.org/project/crewai-strale/) | PyPI | CrewAI integration — drop-in BaseTools for agents |\n| [`strale-semantic-kernel`](https://www.npmjs.com/package/strale-semantic-kernel) | npm | Semantic Kernel plugin for .NET and TypeScript agents |\n| [`composio-strale`](https://pypi.org/project/composio-strale/) | PyPI | Composio integration — custom actions |\n\nEach package's own README is the reference for that integration; this file\nonly points at them. Every distribution PR against an external framework\nrepo, and every publish of one of these packages, follows CLAUDE.md's\nDistribution PR Integrity Protocol — a package claiming framework-native\nintegration is verified against the published artefact, not the source\ntree, before the claim ships.\n\n### Web3\n\nWeb3 capabilities (wallet risk scoring, token honeypot detection, ENS\nresolution, DeFi protocol data, gas oracle, EU MiCA VASP verification,\nmarket sentiment) and bundled solutions for on-chain agents are available\nvia the x402 payment protocol — pay per call with USDC on Base mainnet, no\nsignup required. Not every capability is x402-eligible; read the live,\ndynamic subset from:\n\n```\nGET https://api.strale.io/x402/catalog\nGET https://api.strale.io/.well-known/x402.json\n```\n\n### Quality\n\nCapabilities are continuously tested against their real upstreams: known-\nanswer, schema, negative, edge-case, and dependency-health checks, plus\npiggyback checks fed by real production traffic where a capability's cost\nmodel rules out proactive testing. An enforced quality floor quarantines a\ncapability that falls below it on real traffic and promotes it back\nautomatically on recovery. Strale deliberately publishes no single numeric\ncomposite quality score — an earlier one was retired because it compressed\nunrelated failure modes into a number that looked more precise than it\nwas. What is exposed instead is the raw evidence per capability: status,\nlast-tested timestamp, recent test history, known limitations, and the\ndata source behind it.\n\n```\nGET https://api.strale.io/v1/capabilities/vat-validate\n```\n\nEvery capability publishes its limitations honestly, including coverage\ngaps. Methodology: [strale.dev/quality](https://strale.dev/quality).\n\n### IDE rules for safe data handling\n\nDrop these into your project to give your coding agent security guidance\nfor trust-sensitive data (IBANs, company registries, sanctions, PII):\n\n- **Cursor:** [`docs/ide-rules/strale-compliance.mdc`](docs/ide-rules/strale-compliance.mdc) → `.cursor/rules/`\n- **Windsurf:** [`docs/ide-rules/strale-compliance.windsurfrules`](docs/ide-rules/strale-compliance.windsurfrules) → project root, or `.windsurf/rules/` as `.md`\n- **Claude Code:** the snippet at [`docs/claude-md-snippet.md`](docs/claude-md-snippet.md) → your project's `CLAUDE.md`\n\nThese prevent the most common vibe-coding vulnerabilities: client-side IBAN\nvalidation, hardcoded API keys, missing provenance metadata, and direct\nregistry scraping.\n\n### Agent Skills & code examples\n\n- **[Agent Skills](https://github.com/strale-io/agent-skills)** — `SKILL.md` files for Claude Code, Cursor, Copilot, and Codex. Copy `skills/strale/` into `.claude/skills/`, `.github/skills/`, or `.cursor/skills/`.\n- [Verify a company with Strale](https://gist.github.com/petterlindstrom79/5e22945748c3ce42155bf6d41f46c4e0) (Python)\n- [Validate IBANs — free, no API key](https://gist.github.com/petterlindstrom79/7f83fdc892dcafbc280735af5d0e360d) (Python)\n- [Build an agent with Strale](https://gist.github.com/petterlindstrom79/2e4750eb919d314db7c697a504086e0b) (TypeScript)\n- [Connect Strale to Claude](https://gist.github.com/petterlindstrom79/c08ddc1cb3dfed3ca434c70305dc9e54) (setup guide)\n\n### More\n\n- [strale.dev](https://strale.dev) — homepage and sign-up\n- [strale.dev/docs](https://strale.dev/docs) — API reference\n- [strale.dev/pricing](https://strale.dev/pricing) — pricing\n- [scan.strale.io](https://scan.strale.io) — Beacon, a free agent-readiness scanner\n- [api.strale.io/mcp](https://api.strale.io/mcp) — MCP endpoint (Streamable HTTP)\n- [Examples](https://github.com/strale-io/strale-examples) — copy-paste examples for every integration\n\n## How the code is organised\n\n```\nstrale/\n├── apps/api/          Hono API server: routes, capability executors,\n│                       Drizzle schema + queries, Stripe/matching/auth\n│                       helpers. drizzle/ holds the migration history.\n├── packages/           Published SDKs and framework integrations (see the\n│                       table above) plus internal workspace packages.\n├── manifests/          One YAML file per live capability: pricing, data\n│                       source, field-reliability declarations, test\n│                       fixtures. The onboarding pipeline\n│                       (apps/api/scripts/onboard.ts) is the only\n│                       sanctioned way a capability enters the system —\n│                       see CLAUDE.md's Capability Onboarding Protocol.\n├── design/             Design tokens as data (colors, type, spacing) —\n│                       one active file per surface, candidates carry a\n│                       status, promotion is a decision plus a file swap.\n├── config/              Cross-cutting configuration as data, e.g. the\n│                       environment-variable manifest every process.env\n│                       read is registered against.\n└── scripts/            Repo-root tooling: the checkers behind every\n                        `npm run *:check` script, the session-handoff\n                        gate, and one-off operator scripts.\n```\n\n`apps/api/scripts/` and `apps/api/src/capabilities/` carry the same idea at\ncapability-authoring scope — read `CLAUDE.md`'s \"Adding New Capabilities\"\nsection before writing a new executor.\n\n## How the company runs the repository\n\n**Where truth lives.** Product, state, and roadmap truth is migrating from\nNotion into this repository (`docs/project/`), but the migration is not\ncomplete: `docs/project/START-HERE.md` and the rest of `docs/project/` are\nexplicitly **candidates** (`authority_active: false`) until a founder-\nconfirmed cutover. Until then, Notion (Project Home, the To-do & Build\nPlan, the Decisions DB) is authoritative, and `CLAUDE.md` / `AGENTS.md` say\nso at the top of every session. `docs/README.md` indexes every `docs/`\nsubtree with its current authority status; `docs/project/STRUCTURE.md`\nrecords exactly where the repo's layout still deviates from the migration's\ntarget and why.\n\n**Where work in flight lives.** Multi-batch work is tracked in\n`docs/programs/` (start at `docs/programs/README.md`): each program has a\n`PROGRAM.md` with a \"Resume here\" section and a machine-checked\n`tracks.yaml`. A session resuming a program reads only those two files and\nfollows their pointers — chat history is never required.\n\n**How sessions work.** `CLAUDE.md` is the canonical operating manual for\nClaude Code sessions; `AGENTS.md` is its condensed derivative for Codex-CLI\nsessions and points back at `CLAUDE.md` for anything that can drift rather\nthan restating it. Every session ends through a handoff gate\n(`scripts/handoff/handoff-check.mjs`, installed as a git hook) that refuses\nto let a session leave uncommitted work, an unpushed branch, a stale\nworktree, or code changes with no resume surface for the next session.\nBatch work happens in an isolated `git worktree`, never the shared primary\ncheckout — see `WORKTREES.md`.\n\n**What CI checks, by category, not by exhaustive list** (see\n`.github/workflows/ci.yml` for the exact, current set): an ephemeral-\nPostgres integration lane for money- and audit-chain-critical behavior;\ntypecheck and lint across `apps/api` and every published package; capability\nmanifest structural and fixture-consistency gates; framework-package\nintegrity (a published `*-strale` package must contain real code from the\nframework it claims to integrate with); a family of content-as-data\nregisters, each with its own checker and generated index — research\n(`docs/research/`), design tokens (`design/`), the environment-variable\nmanifest (`config/`), the model-id registry, the public claims register\n(`docs/company/claims.yaml`), program track registers\n(`docs/programs/*/tracks.yaml`), and this repository's own `docs/`\nstructure (`docs:check`, `archive:index -- --check`); and the session-\nhandoff gate itself. Every one of these checkers plants a failure case in a\nthrowaway fixture and proves it fails before the fix — see\n`docs/company/LESSONS.md` family F5.\n\n## Where history lives\n\n`archive/` holds closed, historical, and superseded material — see\n`archive/README.md` for what each subtree holds, generated (with hand-\nwritten prose above it) by `npm run archive:index`. `handoff/` holds one\nfile per session's end-of-session record; `handoff/README.md` is a\ngenerated, reverse-chronological index of all of them by date and stated\nintent. Neither directory is required reading to resume work — the program\nregister and `docs/project/START-HERE.md` are.\n\n## License\n\nMIT\n",
  "bytes": 12680,
  "sha": "bd4dac525a6cbab7b0abf60c336c4ff3c2934f94bdd2b593be32fc07c3e06a6c",
  "repo_slug": "strale-io/strale",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_strale_io_strale_d0787cca/readme"
}