Guardrails for LLM output: pass / fail / review verdicts and one recommended action. Hosted or npm.
ai.overwing/mcp — Model Context Protocol (MCP) Server
The ai.overwing/mcp MCP server provides guardrails for LLM output, producing pass/fail/review verdicts with calibrated confidence. It is designed to return results in under 500 ms. The server is identified with the slug ai-overwing-mcp and focuses specifically on controlled LLM decisioning.
🛠️ Key Features
Guardrails for LLM output
Pass / fail / review verdicts
Calibrated confidence scoring
Response time target: under 500 ms
🚀 Use Cases
Enforcing decision guardrails for LLM-generated outputs
Automatically routing outcomes based on pass/fail/review verdicts
⚡ Developer Benefits
Consistent verdict outputs (pass, fail, review)
Confidence values that are calibrated
Low-latency responses (<500 ms)
⚠️ Limitations
Available behavior described only for LLM output guardrails and verdict generation; other MCP tools are not specified.
Works with no API key: 10 evaluations a day, inputs up to 2,000 characters, and the text is not stored. With a key: 250 a day and up, inputs up to 100,000 characters, and your own rule sets. Score any text (typically an LLM's output) against an Overwing rule set. The text can be in any language; tested in Spanish, Portuguese, French, German, Japanese, Chinese, Korean, Arabic and Hindi. Results come back in English. Returns an aggregate verdict of pass, fail, or review, a recommended_action (block, redact, review, or allow), and per-rule answers with probability, confidence, and the rule's action. Act on recommended_action: block means do not send, redact means remove the flagged content and resend, review means ask a human or a slower model, allow means proceed. Prebuilt sets: 'content-safety' (toxicity, PII, self-harm, sexual content, severity) and 'outbound-message', which also takes a context object (recipient, channel, owns_contact_info) so PII that the recipient already owns is not flagged.
Parameters5
input
string
required
The text to evaluate, in any language
rule_set
string
optional
Rule set slug
metadata
object
optional
Opaque data stored with the evaluation and echoed in webhooks (max 8 KB)
context
object
optional
Facts the rules may reference: recipient, channel, whether you own the data, sender, purpose. Sent to the model alongside the text (max 8 KB). Use the 'outbound-message' rule set to have it honoured.
store
boolean
optional
With a key: false runs the check without keeping the input text or the context (the verdict and metadata are still recorded). Without a key the text is never stored.
Raw schema
{
"type": "object",
"properties": {
"input": {
"type": "string",
"minLength": 1,
"maxLength": 100000,
"description": "The text to evaluate, in any language"
},
"rule_set": {
"type": "string",
"default": "content-safety",
"description": "Rule set slug"
},
"metadata": {
"type": "object",
"additionalProperties": {},
"description": "Opaque data stored with the evaluation and echoed in webhooks (max 8 KB)"
},
"context": {
"type": "object",
"additionalProperties": {},
"description": "Facts the rules may reference: recipient, channel, whether you own the data, sender, purpose. Sent to the model alongside the text (max 8 KB). Use the 'outbound-message' rule set to have it honoured."
},
"store": {
"type": "boolean",
"description": "With a key: false runs the check without keeping the input text or the context (the verdict and metadata are still recorded). Without a key the text is never stored."
}
},
"required": [
"input"
]
}
evaluate_batch
Score up to 50 texts against one rule set in a single call. Each item counts as one evaluation. Returns a summary plus per-item verdicts; items can fail independently. Needs an organization key.
Parameters4
items
array
required
rule_set
string
optional
context
object
optional
Facts the rules may reference: recipient, channel, whether you own the data, sender, purpose. Sent to the model alongside the text (max 8 KB). Use the 'outbound-message' rule set to have it honoured.
store
boolean
optional
False runs every item without keeping its input text or context
Raw schema
{
"type": "object",
"properties": {
"items": {
"type": "array",
"minItems": 1,
"maxItems": 50,
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"maxLength": 128
},
"input": {
"type": "string",
"minLength": 1,
"maxLength": 100000
},
"metadata": {
"type": "object",
"additionalProperties": {}
},
"context": {
"type": "object",
"additionalProperties": {},
"description": "Per-item context; overrides the batch-level context"
}
},
"required": [
"input"
]
}
},
"rule_set": {
"type": "string",
"default": "content-safety"
},
"context": {
"type": "object",
"additionalProperties": {},
"description": "Facts the rules may reference: recipient, channel, whether you own the data, sender, purpose. Sent to the model alongside the text (max 8 KB). Use the 'outbound-message' rule set to have it honoured."
},
"store": {
"type": "boolean",
"description": "False runs every item without keeping its input text or context"
}
},
"required": [
"items"
]
}
list_rule_sets
List the prebuilt and custom rule sets available to this organization. Needs an organization key.
Create a custom rule set with 1 to 25 rules. Each rule is a choice (pick one option), score (position on an ordered scale), or noul (yes/no) question with a fail condition, optional review threshold, weight, and action (block, redact, or review) that callers should take when it fails. Rule instructions may reference `context.*` fields that callers pass with each evaluation. Needs an organization key.
Identify the organization and plan behind the API key on this request, the key's scope, the organization's data settings (store_inputs, retention_days), and whether billing is set up. Needs an organization key.
Parameters
No parameters.
Raw schema
{
"type": "object",
"properties": {}
}
create_account
Create an Overwing account for yourself, with no email: an organization and an API key, returned once. Nothing is sent to anyone. Use it when you have no key and nobody has given you one; do not create a second account if you already have a key (whoami says which account a key belongs to). The key is the account, so store it at once: with no email there is no reset link. It starts at 50 evaluations a day with Beacon summaries; proving a domain (prove_domain, verify_domain) raises that to the normal free limits and full Beacon reports, and makes a lost key recoverable. This server does not keep the key: send it as Authorization: Bearer on the MCP connection for the tools that need one. Tell the person you work for that you made the account and where the key is kept. No key needed.
Parameters2
org_name
string
optional
A name for the account, e.g. the agent's name
use_for_session
boolean
optional
Ignored here. The hosted server has no session and never holds a key; it exists so calls written for the npm package still validate.
Raw schema
{
"type": "object",
"properties": {
"org_name": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "A name for the account, e.g. the agent's name"
},
"use_for_session": {
"type": "boolean",
"description": "Ignored here. The hosted server has no session and never holds a key; it exists so calls written for the npm package still validate."
}
}
}
prove_domain
Begin proving that your account controls a domain. For an account with no email the domain stands in for one: it raises the limits to the normal free tier, opens full Beacon reports, and lets a lost key be replaced. Returns one value to publish at the domain, as a DNS TXT record or as a file under /.well-known; then call verify_domain. One domain belongs to one account. Calling again for the same domain returns the same value. Needs an organization key.
Parameters1
domain
string
required
A domain you or your operator controls, e.g. acme.com
Raw schema
{
"type": "object",
"properties": {
"domain": {
"type": "string",
"minLength": 4,
"maxLength": 255,
"description": "A domain you or your operator controls, e.g. acme.com"
}
},
"required": [
"domain"
]
}
verify_domain
Look for the value prove_domain asked for, at the domain. Found: the domain is the account's. Not found: an error saying what was looked for; DNS changes can take a few minutes, and calling again is safe. Needs an organization key.
Parameters
No parameters.
Raw schema
{
"type": "object",
"properties": {}
}
list_plans
Public plan catalog: prices, daily limits, and per-minute burst limits. No API key needed.
Parameters
No parameters.
Raw schema
{
"type": "object",
"properties": {}
}
atlas_lookup
Say what a User-Agent string claims to be and whether the claim can be trusted, from the Overwing Atlas registry of AI crawlers, fetchers and browser agents. Returns the claimed agent, operator, purpose class, verification method (Web Bot Auth signature, user-agent string only, or unattributable) and a trust note. Works with no API key: 10 lookups a day. With a key, metered per day by Atlas tier: free 100, Pro 10,000, Team 100,000. Use it when deciding whether to serve, block, or pay-gate a request, or to understand who is hitting a site.
Parameters1
user_agent
string
required
The User-Agent header value to identify
Raw schema
{
"type": "object",
"properties": {
"user_agent": {
"type": "string",
"minLength": 1,
"maxLength": 2000,
"description": "The User-Agent header value to identify"
}
},
"required": [
"user_agent"
]
}
atlas_agents
Browse or search Overwing Atlas, the registry of AI crawlers, fetchers and browser agents: name, operator, user-agent tokens, Web Bot Auth key directory, robots.txt behaviour, and (with Atlas Pro or Team) purpose class, verification, evasion flags and traffic shares. Filter by free text, purpose (training, search, browser, coding), operator, or verification. Needs an organization key.
Parameters5
q
string
optional
Free text over name, operator, user agents, description
purpose
string
optional
Purpose substring, e.g. training, search, browser, fetcher, coding
operator
string
optional
verification
string
optional
e.g. 'Web Bot Auth', 'spoofable', 'Unattributable'
Add an agent or crawler you operate to the Overwing Atlas registry, free, so a site that looks up its User-Agent learns who runs it. Give the agent's name, the operator (the company or person running it), the operator's domain, and the token the User-Agent carries (the product name, such as AcmeBot). The answer carries one value to publish at that domain, as a DNS TXT record or as a file under /.well-known, to prove control of it; then call atlas_verify_registration. A token may not match, contain, or sit inside one already in the registry. This proves control of the domain, not that any given request is yours: the entry is listed as user-agent only unless key_directory_url is a Web Bot Auth key directory on that domain. Only register agents you or your operator actually run. Needs an organization key.
Parameters10
name
string
required
The agent's name, e.g. AcmeBot
operator
string
required
The company or person that runs the agent
domain
string
required
The operator's domain, e.g. acme.com. Control of it must be proved
tokens
array
required
The product name the User-Agent carries, e.g. ["AcmeBot"]
purpose
string
optional
user_agent
string
optional
The full User-Agent string the agent sends; it must contain a token
description
string
optional
policy_url
string
optional
An https page describing the agent
key_directory_url
string
optional
A Web Bot Auth key directory on the operator's domain
follows_robots_txt
boolean
optional
Raw schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 3,
"maxLength": 80,
"description": "The agent's name, e.g. AcmeBot"
},
"operator": {
"type": "string",
"minLength": 2,
"maxLength": 120,
"description": "The company or person that runs the agent"
},
"domain": {
"type": "string",
"minLength": 4,
"maxLength": 255,
"description": "The operator's domain, e.g. acme.com. Control of it must be proved"
},
"tokens": {
"type": "array",
"minItems": 1,
"maxItems": 3,
"items": {
"type": "string",
"minLength": 5,
"maxLength": 60
},
"description": "The product name the User-Agent carries, e.g. [\"AcmeBot\"]"
},
"purpose": {
"type": "string",
"enum": [
"training_crawl",
"search_index",
"user_fetch",
"browser_agent",
"coding_agent",
"api_agent",
"other"
],
"default": "other"
},
"user_agent": {
"type": "string",
"maxLength": 500,
"description": "The full User-Agent string the agent sends; it must contain a token"
},
"description": {
"type": "string",
"maxLength": 600
},
"policy_url": {
"type": "string",
"maxLength": 500,
"description": "An https page describing the agent"
},
"key_directory_url": {
"type": "string",
"maxLength": 500,
"description": "A Web Bot Auth key directory on the operator's domain"
},
"follows_robots_txt": {
"type": "boolean"
}
},
"required": [
"name",
"operator",
"domain",
"tokens"
]
}
atlas_verify_registration
Look for the proof at the operator's domain: the DNS TXT record or the file that atlas_register_agent asked for. Found: the entry is published in the registry, or held for a person when the operator name already belongs to someone. Not found: an error saying what was looked for; DNS changes can take a few minutes, and calling again is safe. Needs an organization key.
Parameters1
id
string
required
The registration id from atlas_register_agent
Raw schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"pattern": "^areg_[A-Za-z0-9_-]{16}$",
"description": "The registration id from atlas_register_agent"
}
},
"required": [
"id"
]
}
atlas_list_registrations
The agents this organization has registered in Overwing Atlas, newest first, each with its status (pending_verification, pending_review, published, rejected) and, while unverified, the value to publish at the domain. Needs an organization key.
Parameters
No parameters.
Raw schema
{
"type": "object",
"properties": {}
}
atlas_withdraw_registration
Withdraw a registration. A published entry leaves the registry, so lookups stop naming the agent; an unfinished request is abandoned. This cannot be undone: register again to put it back. Needs an organization key.
Parameters1
id
string
required
The registration id from atlas_register_agent
Raw schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"pattern": "^areg_[A-Za-z0-9_-]{16}$",
"description": "The registration id from atlas_register_agent"
}
},
"required": [
"id"
]
}
atlas_summary
Public numbers from Overwing Atlas: registry counts by purpose and verification, published browser-agent traffic shares, sector field-scan headlines (e.g. how many OSINT sites carry AI-crawler rules or any agent-payable surface), and the summary of the Agent Consumers report on what agents actually spend. No key needed.
Parameters
No parameters.
Raw schema
{
"type": "object",
"properties": {}
}
beacon_start
Overwing Beacon answers one question about a site: is this product reachable by agents? It checks robots.txt rules for AI agents, llms.txt, the sitemap, the MCP server card, hosted MCP endpoint and MCP Registry listing, the A2A agent card, OpenAPI discovery, and how the home page reads to a model, then returns three answers (find, read, use), a score and the fixes worth making. This tool starts a check and returns its id; it is free. Then call beacon_report with the id, which runs the check (about twenty seconds). With an Overwing key on the connection beacon_report returns the full report and the check is saved to that dashboard; with no key it returns the summary: the score, the three answers and the first fix. A key is free (POST /api/v1/signup). An agent with a wallet and no account can instead pay $1 in USDC over x402 and get the full report in one call: GET /api/x402/beacon?url=<site>. Call beacon_sample to see a real report in full. No key needed.
Parameters1
url
string
required
The site to check: a domain (example.com) or an https URL. Public sites only.
Raw schema
{
"type": "object",
"properties": {
"url": {
"type": "string",
"minLength": 3,
"maxLength": 500,
"description": "The site to check: a domain (example.com) or an https URL. Public sites only."
}
},
"required": [
"url"
]
}
beacon_report
The report for a check started with beacon_start. The first call runs the check. With an Overwing key on the connection: score (0 to 100), verdict (yes, partly, no), the find / read / use answers, every check with what was found and a fix when it did not pass, and top_fixes ranked by value. With no key, the summary of the same report: score, verdict, the three answers and the first fix (access=summary). Answers 202 while the check is running (ask again in a few seconds). No key needed for the summary.
Parameters1
id
string
required
The check id from beacon_start
Raw schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"pattern": "^bcn_[A-Za-z0-9_-]{16}$",
"description": "The check id from beacon_start"
}
},
"required": [
"id"
]
}
beacon_sample
A real Overwing Beacon report, free: the check of overwing.ai itself, refreshed daily. Read it to see exactly what a full report holds before starting a check. No key needed.
Parameters
No parameters.
Raw schema
{
"type": "object",
"properties": {}
}
tower_load_template
Set up Overwing Tower for this organization by loading the starter workflow: email purchase order to order entry, with create_order, update_order and cancel_order against a mock IBM i system, and a starter policy. Idempotent. Needs an organization key. Returns a sample input you can submit. Next: tower_create_agent.
Parameters
No parameters.
Raw schema
{
"type": "object",
"properties": {}
}
tower_create_agent
Create a scoped agent identity and its key. Needs an organization key. Scope it to the operations the agent needs (for example create_order) rather than * where you can. The key (ow_agent_...) is returned once, in this result, and this server does not keep it: store it, and send it as the Authorization bearer on a connection used for the agent tools (tower_capabilities, tower_decide, tower_submit_action, tower_get_action, tower_compensate, tower_get_receipt, tower_verify_receipts). Revoke with tower_revoke_agent.
Parameters3
name
string
required
A name a person will recognise in the review queue, e.g. order-intake-bot
scopes
array
required
Operation names this agent may call, or ["*"] for all
use_for_session
boolean
optional
Ignored here. The hosted server has no session and never holds a key; it exists so calls written for the npm package still validate.
Raw schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "A name a person will recognise in the review queue, e.g. order-intake-bot"
},
"scopes": {
"type": "array",
"minItems": 1,
"maxItems": 50,
"items": {
"type": "string",
"pattern": "^(\\*|[a-z][a-z0-9_]{0,63})$"
},
"description": "Operation names this agent may call, or [\"*\"] for all"
},
"use_for_session": {
"type": "boolean",
"description": "Ignored here. The hosted server has no session and never holds a key; it exists so calls written for the npm package still validate."
}
},
"required": [
"name",
"scopes"
]
}
tower_list_agents
List this organization's Tower agents with scopes, status and last use. Keys are never returned. Needs an organization key.
Parameters
No parameters.
Raw schema
{
"type": "object",
"properties": {}
}
tower_revoke_agent
Revoke an agent. Its key stops working at once and cannot be restored. Needs an organization key.
Parameters1
agent_id
string
required
The agent's id (a UUID), from tower_list_agents
Raw schema
{
"type": "object",
"properties": {
"agent_id": {
"type": "string",
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
"description": "The agent's id (a UUID), from tower_list_agents"
}
},
"required": [
"agent_id"
]
}
tower_capabilities
List the operations this agent is allowed to call, each with the JSON Schema its input must match and its compensating operation. Call this first; build inputs from the schema rather than guessing. Needs an agent key.
Parameters
No parameters.
Raw schema
{
"type": "object",
"properties": {}
}
tower_decide
Ask Tower how it would rule on an operation without doing anything: auto (would execute), review (a person must approve), or reject. Returns the score, the reason, and each policy question's answer. No side effects. Needs an agent key.
Parameters2
operation
string
required
input
object
required
The operation's input, matching its input_schema from tower_capabilities
Ask Tower to perform an operation on the legacy system. Tower decides: executed (done), pending (a person must approve; poll tower_get_action, do not resubmit), or rejected (do not retry unchanged). Always send an idempotency_key that is stable for this business request, such as the source message id: repeating a key returns the original outcome instead of acting twice. Set dry_run to see the decision without executing. Needs an agent key.
Parameters4
operation
string
required
input
object
required
The operation's input, matching its input_schema from tower_capabilities
idempotency_key
string
required
Stable per business request; reuse it on retries
dry_run
boolean
optional
Raw schema
{
"type": "object",
"properties": {
"operation": {
"type": "string",
"minLength": 1,
"maxLength": 64
},
"input": {
"type": "object",
"additionalProperties": {},
"description": "The operation's input, matching its input_schema from tower_capabilities"
},
"idempotency_key": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "Stable per business request; reuse it on retries"
},
"dry_run": {
"type": "boolean"
}
},
"required": [
"operation",
"input",
"idempotency_key"
]
}
tower_get_action
Status and result of an action: pending, approved, executed, failed, compensated, or rejected. Use it to poll an action that is waiting on human review. Needs an agent key.
Parameters1
action_id
string
required
The action's id (a UUID), from tower_submit_action
Raw schema
{
"type": "object",
"properties": {
"action_id": {
"type": "string",
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
"description": "The action's id (a UUID), from tower_submit_action"
}
},
"required": [
"action_id"
]
}
tower_compensate
Run the compensating operation for an executed action, for example cancel the order that create_order made. Runs once; repeating it returns the first outcome. Needs an agent key.
Parameters1
action_id
string
required
The executed action's id (a UUID)
Raw schema
{
"type": "object",
"properties": {
"action_id": {
"type": "string",
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$",
"description": "The executed action's id (a UUID)"
}
},
"required": [
"action_id"
]
}
tower_get_receipt
Fetch one signed receipt by id or by sequence number: the payload, its hash, the previous link's hash, and the Ed25519 signature. Needs an agent key.
Recompute every hash and check every signature over a range of this organization's receipts. Reports the first break, if any. Defaults to the whole chain (up to 5,000 links per call). Needs an agent key.
Guardrails for LLM output, as MCP tools.
Score any text for safety and quality. Get pass / fail / review verdicts with calibrated confidence, usually in under 500 ms.
Overwing is an API that checks what your model said before it ships. This package exposes it to any MCP-capable agent: Claude Desktop, Claude Code, Cursor, Windsurf, VS Code, OpenAI's Agents SDK, and anything else that speaks the Model Context Protocol.
Real verdicts, not vibes. Every rule returns a typed answer, a probability, and a confidence. fail means a rule matched; review means it was unsure; pass means neither.
Prebuilt content-safety and outbound-message rule sets: toxicity, personal data, confidential leaks, self-harm, sexual content, severity. Or write your own rules in plain language.
Built for agents. Sign up, pay, evaluate, rotate keys, and cancel, all as JSON. No CAPTCHA, no browser required. See overwing.ai/llms.txt.
Try it without installing anything: paste text into the console at overwing.ai.
Hosted, no install
The same 34 tools are served at https://overwing.ai/mcp (Streamable HTTP). Point any client that takes a remote MCP URL at it:
bash
claude mcp add --transport http overwing https://overwing.ai/mcp
No key is needed for evaluate, atlas_lookup, atlas_summary, list_plans, create_account and the three beacon_ tools. For the rest, send Authorization: Bearer ow_live_... on the connection.
Install
It works with no API key: evaluate and atlas_lookup each run 10 times a day free, and text sent without a key is not stored. For more, get a key at overwing.ai/login, or let your agent make its own account with the create_account tool. That account has no email: nothing is sent to anyone, and the key is returned once. The same call from a shell:
bash
curl -X POST https://overwing.ai/api/v1/signup
Put the key in OVERWING_API_KEY. An account with no email starts at 50 evaluations a day; proving a domain (prove_domain, verify_domain) raises it to the normal free limits and makes a lost key recoverable.
Claude Code
bash
claude mcp add overwing -e OVERWING_API_KEY=ow_live_... -- npx -y overwing-mcp
Claude Desktop, Cursor, Windsurf, VS Code (any JSON-configured client)
Set OVERWING_BASE_URL to point at a self-hosted deployment. Requires Node 20+.
For Overwing Tower, set OVERWING_AGENT_KEY=ow_agent_... to operate as an existing agent. Without it, tower_create_agent mints a key with the organization key and keeps it in memory for the session.
evaluate, atlas_lookup, atlas_summary and list_plans work with no key at all.
The text can be in any language. It was tested on 2026-09-29 in Spanish, Portuguese, French, German, Japanese, Simplified Chinese, Korean, Arabic and Hindi: a small test, not a benchmark. Results come back in English.
Tools
Tool
What it does
evaluate
Score one text against a rule set. Returns the verdict, a recommended_action (block, redact, review, or allow), aggregate score, confidence, latency, and per-rule results with each rule's action. Takes an optional context object (recipient, channel, ownership) that context-aware rule sets such as outbound-message read, and store: false to run the check without keeping the text.
evaluate_batch
Score up to 50 texts in one call, with a summary and per-item verdicts and recommended actions.
list_rule_sets · get_rule_set · create_rule_set
Browse the prebuilt set or define your own rules: yes/no questions, classifications, or scored scales.
get_evaluation · list_evaluations
Read stored results, filter by verdict or rule set, page with a cursor.
create_account · prove_domain · verify_domain
An account for the agent itself, with no email: create_account returns a key and sends nothing to anyone. Proving a domain (a DNS TXT record or a file) takes the place of the email: it raises the limits, opens full Beacon reports, and makes a lost key recoverable.
atlas_lookup
Overwing Atlas: say what a User-Agent string claims to be and whether the claim can be trusted (Web Bot Auth, spoofable string, or unattributable). Works with no key, 10 a day; 100 a day with a free key.
atlas_agents · atlas_summary
Search the registry of AI crawlers, fetchers and browser agents; get traffic shares, sector field-scan headlines, and the agent-spending summary.
Add an agent you operate to the Atlas registry, free, so a lookup of its User-Agent names you. Register it, publish the value you are given at the operator's domain (a DNS TXT record or a file), then verify. Needs OVERWING_API_KEY.
beacon_start · beacon_report · beacon_sample
Overwing Beacon: is a site reachable by agents? Checks robots.txt, llms.txt, the MCP server card, endpoint and Registry listing, the A2A agent card and OpenAPI, and how the home page reads to a model. A check is free: beacon_start returns an id and beacon_report runs the check and returns the report. With OVERWING_API_KEY it is the full report, saved to your dashboard; with no key it is the summary (the score, the three answers and the first fix). beacon_sample is a real report in full.
Overwing Tower setup, with the organization key: load the starter order-entry workflow, then mint a scoped agent identity. The new agent key is used for the rest of the session.
Overwing Tower operations, with the agent key: see which operations you may call and their input schemas, ask how a request would be ruled, submit it (executed, pending human review, or rejected), poll it, undo it.
tower_get_receipt · tower_verify_receipts
Read a signed receipt, or recompute every hash and signature in the chain.
get_usage · whoami · list_plans
Today's quota, the org behind the key, and the public plan catalog.
The overwing://guide resource returns the full plain-text API guide.
Data handling and security
What this server does on your machine: it reads three environment variables (OVERWING_API_KEY, OVERWING_AGENT_KEY, OVERWING_BASE_URL) and makes HTTPS requests to the Overwing API. It reads no files, runs no commands, and talks to no other host. It has two runtime dependencies (@modelcontextprotocol/sdk, zod), and the whole server is one file: src/index.ts.
What happens to text you evaluate:
It is sent to the Overwing API, and from there to TypeSafe, whose Jev model produces the verdict. It is not used to train models.
Without a key the text is never stored.
With a key the text, context and verdict are stored so you can read them back with get_evaluation, until you delete them. To change that:
pass store: false to evaluate or evaluate_batch to keep no text or context for that call;
set store_inputs: false on the organization (PATCH /api/v1/org, or the dashboard) to keep none at all;
set retention_days on the organization to delete evaluations after that many days.
Traffic is encrypted in transit (TLS) and the database is encrypted at rest (AES-256).
Give your agent a restricted key. A key with scope evaluate can run checks and read rule sets, and cannot read stored evaluations, change rule sets, manage keys, webhooks or billing, or delete anything:
Overwing is a young service and has not had an independent security audit. The full picture, including subprocessors and what we have not done, is at overwing.ai/security; the privacy policy is at overwing.ai/privacy. To report a vulnerability, see SECURITY.md.
Example
Ask your agent:
Check this reply before I send it: "Reach me at dana@example.com or 555-0142 to sort out the refund."
Each rule has a fail condition, an optional review threshold, and a weight.
fail: a rule's fail condition matched. Block it, redact it, or regenerate.
review: nothing failed, but a rule's confidence was below its threshold. Route to a person or a slower model.
pass: everything else.
Every rule also carries an action (block, redact, or review), and the response rolls them up into one recommended_action: block beats redact beats review beats allow. Branch on that field. Pass a context object (recipient, channel, owns_contact_info) with the outbound-message rule set and its rules read it, so a customer's own phone number in a reply to that customer is not flagged.
aggregate_score is 0 to 1 (pass = 1, review = 0.5, fail = 0 per rule, weighted). confidence is the minimum across rules.
Pricing
Free: 250 evaluations a day. Paid plans from $29/month. Every plan includes every endpoint, custom rule sets, webhooks, and the dashboard. Full details at overwing.ai/#pricing or GET https://overwing.ai/api/v1/plans.
Overwing organization key (ow_live_...). Optional: evaluate and atlas_lookup work without it, 10 a day each. Needed for higher limits, rule sets and Tower setup. Get one at https://overwing.ai/login or POST https://overwing.ai/api/v1/signup
OVERWING_AGENT_KEYsecret
Optional Overwing Tower agent key (ow_agent_...). Without it, the tower_create_agent tool mints one for the session
OVERWING_BASE_URL
Override the API base URL for self-hosted deployments (default https://overwing.ai)