@lexvibe/mcp
One-step full compliance: Use
make_compliantto scan your project, generate localized legal documents (privacy policy, terms of service, AI disclosure), install a cookie consent banner, and classify EU AI Act risk.Project scanning: Detect data processing activities, dependencies, and platform types (web, iOS, Android) from local source code.
Compliance readiness check: Get a read‑only report via
check_complianceidentifying automatically detected facts versus those requiring human input, with prompts your AI assistant can resolve.Deployed website check: Run a free, no‑signup scan of a live URL with
check_websiteto catch tracking and processing drift not visible in local code.Legal document generation: Create privacy policies, terms of service, and AI disclosures tailored to regulations like GDPR, CCPA/CPRA, UK GDPR, PIPEDA, LGPD, and specific target markets.
Cookie consent management: Install a theme‑aware cookie‑banner snippet into HTML (or get JSX instructions) with
install_snippet; verify it’s live usingverify_snippet.EU AI Act classification: Use
check_ai_actto assess risk level (minimal, limited, high, prohibited) and list compliance obligations and deadlines.Account integration: Claim your app via
claim_appto get hosted policies, consent proof, and auto‑updates in your LexVibe account; poll claim status withget_claim_status.
Enables legal compliance for Next.js applications, including scanning for analytics and third-party services, generating localized legal documents, and installing cookie consent banners.
Provides a one-liner prompt for Replit projects to achieve legal compliance via LexVibe, including policy generation and cookie consent installation.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@@lexvibe/mcpMake my app legally compliant for the EU and US."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@lexvibe/mcp
LexVibe MCP server — one-step legal compliance for vibe-coded apps (Lovable, Bolt, v0, Next.js, plain HTML). Wire it into your AI assistant (Claude Code, Claude Desktop, Cursor…) and it makes your app "legally ready" without you knowing the law: privacy policy, terms of service, cookie consent banner with real script blocking, and an EU AI Act risk check.
Tools
Tool | What it does |
| One step: scan → generate docs into |
| Read-only readiness report: what was detected, what could be auto-derived, and which human facts are still missing. Run it again after adding any SDK to catch drift. |
| Detect analytics, payments, generative AI, email collection, third parties and platforms (web / iOS / Android). |
| Free, no-signup compliance check of a deployed site by URL: per-vendor signals, recommendations and EU AI Act applicability (the same public checker as |
| Fetch a deployed URL and confirm the cookie-banner snippet is actually live in the served HTML ( |
| Generate privacy policy / terms / AI disclosure, localized and tailored per market. |
| Insert the cookie-banner snippet before |
| Classify EU AI Act risk and list the applicable obligations with deadlines. |
| Create a REAL app in the user's LexVibe account: returns a link the user opens to sign in and confirm (30 min). |
| Poll a claim created with |
Related MCP server: LegalForge MCP Server
Typical use (natural language)
"Make my app legally compliant for the EU and the US."
One make_compliant call: the agent scans the project, writes the localized
policies to /legal, installs the cookie-banner snippet in your HTML head and
returns the EU AI Act classification plus next steps. You just review and
approve.
Draft-first flow: start with check_compliance — it reports what the scan
could figure out on its own and returns an agentPrompt your coding agent can
answer by reading the repo (company entity, contact email, target markets), so
there are no forms to fill.
No app id yet? The agent calls claim_app and hands you a link: open it, sign
in and confirm — that creates the real app in your LexVibe account (hosted,
auto-updated policies and consent proof linked to you). The agent then picks up
the real app id via get_claim_status and replaces any YOUR_APP_ID
placeholder automatically.
Keep your policies in sync with your code
Legal documents describe your app as it was when they were generated. Every SDK you add afterwards — payments, analytics, auth, AI — is a processing activity your documents don't cover yet. LexVibe calls this drift, and the MCP server is the sensor that lives inside your AI dev loop: the same assistant that adds the SDK can catch the compliance gap before you deploy.
Paste this standing rule into your assistant's project rules — AGENTS.md
(Codex, Gemini CLI and most agents), CLAUDE.md, .cursorrules,
.windsurfrules…:
After adding any SDK, analytics, payments, auth or AI integration to this project, run LexVibe's
check_compliancetool and follow its recommendation.
When check_compliance reports processing activities that were added after
your documents were generated, re-run generate_policies (or
make_compliant) so the documents disclose the new processing. The same
applies to the deployed site: check_website detects the trackers that
actually ship to visitors, so you can catch drift the local scan can't see
(scripts injected by a CMS, a tag manager, a no-code platform…). Claimed apps
are also watched by LexVibe's other drift sensors (periodic site rechecks and
the GitHub integration), and the remote check_website tool additionally
returns a drift section for claimed apps comparing the live site against
the baseline the documents were generated from.
Quickstart
npx -y @lexvibe/mcp # or build from source: npm run build -w packages/mcpClaude Code (.mcp.json in your project, or claude mcp add)
{
"mcpServers": {
"lexvibe": {
"command": "npx",
"args": ["-y", "@lexvibe/mcp"],
"env": {
"LEXVIBE_APP_ID": "your-app-id"
}
}
}
}Cursor (~/.cursor/mcp.json)
{
"mcpServers": {
"lexvibe": {
"command": "npx",
"args": ["-y", "@lexvibe/mcp"],
"env": {
"LEXVIBE_APP_ID": "your-app-id"
}
}
}
}Claude Desktop uses the same mcpServers structure in
claude_desktop_config.json.
Codex CLI (~/.codex/config.toml)
Codex is the one client that does not use the mcpServers JSON above — its
config is TOML:
codex mcp add lexvibe -- npx -y @lexvibe/mcpOr by hand:
[mcp_servers.lexvibe]
command = "npx"
args = ["-y", "@lexvibe/mcp"]
env = { LEXVIBE_APP_ID = "YOUR_APP_ID" }Project-scoped config lives in .codex/config.toml (trusted projects only).
Gemini CLI (~/.gemini/settings.json)
Same mcpServers shape as Cursor. For the remote server use httpUrl, not
url: in Gemini CLI url means SSE, and this endpoint speaks Streamable HTTP
only, so url fails without saying why.
{
"mcpServers": {
"lexvibe": { "httpUrl": "https://golexvibe.com/api/mcp" }
}
}Remote MCP (no install)
Browser-based agents that cannot run local processes — claude.ai / Claude Desktop connectors, ChatGPT connectors — can use the hosted remote server instead (Streamable HTTP, no auth):
https://golexvibe.com/api/mcpThe remote server has no filesystem access, so it exposes the remote-safe
subset: check_website, check_store, generate_policies (template-based
drafts, capped for anonymous callers), check_ai_act, get_install_snippet,
plus claim_app / get_claim_status to create a real app in the user's
account. Stdio-only clients can bridge to it with
npx -y mcp-remote https://golexvibe.com/api/mcp.
Which integration to use, per platform
Platform | Integration | How |
Claude Code | stdio (or remote) |
|
Cursor / Windsurf / Cline / VS Code | stdio |
|
Codex CLI | stdio (or remote) |
|
Gemini CLI | stdio (or remote) |
|
Zed | stdio (or remote) |
|
Claude Desktop / claude.ai | remote | Settings → Connectors → |
ChatGPT | remote | Settings → Connectors → |
Lovable / Bolt / v0 / Base44 / Replit | prompt (no MCP) | Paste the one-liner from https://golexvibe.com/prompt |
Full per-platform setup guide: https://golexvibe.com/docs/integrations
Configuration
Variable | Default | Purpose |
|
| Your LexVibe app id (links the snippet to your hosted policies) |
|
| LexVibe instance that generates documents and classifies AI risk |
|
| Host the widget script is served from (self-hosting only) |
| LexVibe events endpoint | Override where anonymous tool-usage events are sent (self-hosting) |
|
| Set to |
Usage analytics
Each tool call sends one anonymous mcp_tool_call event to LexVibe so your MCP
usage shows up alongside your website in the Platform analytics dashboard
(same event the hosted remote server already records, tagged
source: "mcp_stdio" so the two channels are distinguishable).
Anonymous. The event carries only the tool name, the package version and — only when
LEXVIBE_APP_IDis a real app id (a valid UUID) — that app id, so the events map to your app. Placeholders likeyour-app-idare ignored. Never your file paths, file contents, app name, emails or generated documents.Non-blocking. It's fire-and-forget with a 3s timeout: it never delays, breaks or fails a tool call, even offline.
Opt-out. Set
LEXVIBE_TELEMETRY=0(or the de-factoDO_NOT_TRACK=1) to turn it off completely.
Side effects:
scan_project,check_compliance,check_website,verify_snippet,check_ai_actandget_claim_statusare read-only (check_website, the AI Act check and the claim poll call the LexVibe API;verify_snippetfetches the URL you pass it — public http(s) hosts only, with the same anti-SSRF validation the platform uses).generate_policiescalls the API and returns Markdown.install_snippetedits one file on your local filesystem (only when it contains</head>).make_compliantdoes both: it calls the API and writes files (/legal/*.mdplus the snippet in your HTML head).claim_appcreates a pending claim in LexVibe; the app itself is only created when the user confirms the link while signed in.
Available Tools
10 toolscheck_ai_actARead-onlyInspect
Classify a product's risk level under the EU AI Act — minimal, limited, high or prohibited — and return the applicable obligations, each with its compliance deadline (limited-risk transparency duties apply from Aug 2, 2026; Annex III high risk from Dec 2, 2027). The boolean parameters fall into three groups, all optional and defaulting to the safest 'not applicable' value: (1) transparency triggers — usesAI, interactsWithPeople, generatesContent, automatedDecisions; (2) the eight prohibited practices of art. 5 — socialScoring, realtimeBiometricPublic + realtimeBiometricLawEnforcement, emotionRecognitionWorkEducation, biometricCategorisationSensitive, untargetedFaceScraping, manipulativeOrExploitative, individualPredictivePolicing; (3) high-risk triggers — embeddedInRegulatedProduct, annexIII domains. Answer from what you know about the product (scan_project's suggestedAnswers.usesGenerativeAI maps to usesAI + generatesContent); leave unknowns at their defaults, which never over-report risk. Returns {level, headline, explanation, obligations: [{title, description, deadline}]}. Read-only, no signup; requires network access to the LexVibe API (errors return {error} with isError). Use it when the user asks whether the EU AI Act applies to them or after adding an AI feature; make_compliant already includes a basic version of this check.
| Name | Required | Description | Default |
|---|---|---|---|
| usesAI | No | Does the product use AI at all (LLM calls, recommendations, computer vision…)? false ⇒ minimal risk, the AI Act does not apply. | |
| annexIII | No | Annex III high-risk domains the system operates in: biometrics, critical (infrastructure), education, employment (HR/hiring), essential (credit, insurance, benefits), law (enforcement), migration, justice. Empty if none apply. | |
| socialScoring | No | Does it score people's social behavior or traits causing detrimental treatment in unrelated contexts, or disproportionate to the behavior (art. 5.1.c)? Prohibited. A seller rating or fitness points app is NOT this. | |
| generatesContent | No | Does it generate text, images, audio or video shown to users? Triggers the art. 50 duty to label AI-generated content. | |
| automatedDecisions | No | Does it make automated decisions with legal or similarly significant effects on people (credit, hiring, admissions…)? Adds GDPR art. 22 duties; high risk only if an Annex III domain applies. | |
| interactsWithPeople | No | Do people interact directly with the AI (chatbot, voice assistant…)? Triggers the art. 50 duty to disclose they are talking to an AI. | |
| untargetedFaceScraping | No | Does it untargetedly scrape facial images from the internet or CCTV footage to build or expand a face-recognition database (art. 5.1.e)? Prohibited. Matching a user's own consented selfie against their own ID photo is NOT this. | |
| realtimeBiometricPublic | No | Real-time remote biometric identification in publicly accessible spaces (e.g. live face recognition)? High risk (Annex III biometrics) — prohibited only when combined with realtimeBiometricLawEnforcement. | |
| embeddedInRegulatedProduct | No | Is the AI a safety component embedded in an Annex I regulated product (toys, machinery, medical devices…)? High risk via art. 6.1, deadline Aug 2, 2028. | |
| manipulativeOrExploitative | No | Does it use subliminal techniques beyond a person's consciousness, or exploit a known vulnerability (age, disability, specific social or economic situation) to materially distort behavior and cause harm — e.g. dark patterns targeting a diagnosed gambling addiction (art. 5.1.a-b)? Prohibited. Ordinary persuasive marketing or UX nudges aimed at the general population are NOT this. | |
| individualPredictivePolicing | No | Predicting an individual's criminal risk based solely on profiling or personality traits (art. 5.1.d)? Prohibited. | |
| emotionRecognitionWorkEducation | No | Does it infer emotions (frustration, attention, mood…) from employees at work or students in education, e.g. to flag disengaged staff or bored students (art. 5.1.f)? Prohibited. Emotion inference on end users of a public consumer product (not their employees/students) is NOT this. | |
| realtimeBiometricLawEnforcement | No | Only if realtimeBiometricPublic: is it used for LAW ENFORCEMENT purposes? That combination is prohibited (art. 5.1.h) and already in force. | |
| biometricCategorisationSensitive | No | Does it use biometric data (face, voice, gait…) to infer sensitive attributes — race, political opinion, religion, trade-union membership, sexual orientation (art. 5.1.g)? Prohibited. Ordinary face-unlock or liveness checks that don't infer these attributes are NOT this. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond annotations: read-only, no signup required, requires network access to LexVibe API, error returns {error} with isError. It also explains parameter defaults default to the safest 'not applicable' value, which aligns with destructiveHint=false. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is lengthy but well-structured: starts with core purpose, then parameter grouping, return format, and usage notes. It front-loads the main action and avoids redundancy. Every sentence earns its place, though brevity could be improved.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of 14 boolean parameters and no output schema, the description adequately explains the return structure ({level, headline, explanation, obligations}) and each parameter's impact. It also covers error handling and network requirements, making the tool usable without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameter descriptions exist. The tool description adds value by grouping parameters into three categories (transparency triggers, prohibited practices, high-risk triggers) and mapping to scan_project's outputs (e.g., usesGenerativeAI maps to usesAI and generatesContent). This enhances understanding beyond the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool classifies a product's risk level under the EU AI Act, returning risk levels (minimal, limited, high, prohibited) and obligations with deadlines. It also differentiates from siblings like scan_project and make_compliant, noting mapping of scan_project's outputs to parameters and that make_compliant includes a basic version of this check.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage guidance: use when the user asks whether the EU AI Act applies to them or after adding an AI feature. It also explains when not to use (leave unknowns at defaults) and mentions an alternative (make_compliant already includes a basic version of this check).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_complianceARead-onlyInspect
Read-only compliance readiness check. Run this after adding any SDK, analytics, payment, auth or AI integration — it detects processing activities your legal documents don't cover yet. It scans the project, detects platforms and data processing, auto-derives what it can (app name, legal entity, contact email) and reports which human facts are still missing (including target markets). Returns {platforms, detected, derived, provided, missing, ready, agentPrompt}: ready is true only when no human fact is missing, and agentPrompt is a prompt you (the dev agent) can answer from the repo, so document generation needs no forms. Never modifies files; errors if dir does not exist or is not a project root. Call it before make_compliant when you want to confirm facts first; re-run it with the answers as arguments until ready is true.
| Name | Required | Description | Default |
|---|---|---|---|
| dir | Yes | Path of the project root to analyze (absolute paths are safest). | |
| entity | No | Data controller / legal entity, if already known (overrides the derived one). | |
| appName | No | Override the auto-derived app name. | |
| markets | No | Regions where the app has users. Without them `ready` can never be true (markets are a required human fact). | |
| contactEmail | No | Privacy contact email, if already known (overrides the derived one). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint=true, destructiveHint=false), description adds key behaviors: never modifies files, errors on invalid dir/path, and explains return value structure including 'agentPrompt' for dev agent. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and usage; every sentence adds value. Slightly long but dense with information, no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, but description fully explains return object fields and 'ready' condition. Covers error conditions, iterative workflow, and required parameters. Complete for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions. Description adds context like 'markets are a required human fact' and 'overrides the derived one' for entity/appName, enriching meaning beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb ('Read-only compliance readiness check') and resource ('project'), with specific use case after adding integrations. Distinguishes itself from sibling tools like make_compliant by indicating it's a precursor check.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells when to use ('after adding any SDK, analytics, payment, auth or AI integration') and when not to (implies not for full generation, as call before make_compliant). Provides iterative re-run strategy until 'ready' is true.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_websiteARead-onlyInspect
Free, no-signup compliance check of a DEPLOYED website by URL (the same public checker as the LexVibe /check page). Fetches the live page server-side and detects tracking/processing that actually ships to visitors — analytics, marketing pixels, payments, generative AI, email capture, third parties. Returns {url, signals: [{signal, vendors}], recommendations: [{id, title, reason}], aiAct} — which documents/banner the site needs and whether the EU AI Act applies. Read-only and rate-limited (a burst of calls returns an error asking to wait a minute). Complements scan_project (which reads the local source): use check_website after deploying, or for a site whose code you don't have.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Public URL (or bare domain) of the deployed site, e.g. https://myapp.com or myapp.com. Must be publicly reachable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations indicating read-only and non-destructive, the description explains server-side fetching, detection of tracking/processing, and the output structure. It also notes rate-limit behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with key benefits, then details on functionality and usage. Every sentence adds value, no redundancy. Structure is logical and concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given simple input (one parameter) and no output schema, the description fully explains the return structure and behavior. It also references sibling tools and usage context, making it self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema already fully describes the 'url' parameter with examples and requirement. The tool description adds no new parameter information beyond restating that it's a public URL, so baseline 3 is appropriate given 100% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs a compliance check of a deployed website by URL, distinguishing itself from sibling scan_project which reads local source. It specifies the output format and the context of use.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use: after deploying or for sites without source code. Mentions rate-limiting and that it complements scan_project, guiding the agent on alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
claim_appAInspect
Create a REAL LexVibe app in the user's account (replaces the YOUR_APP_ID placeholder). Returns {claimUrl, code, expiresAt}: show claimUrl to the user so they can sign in and confirm — the link expires in 30 minutes. After they confirm, call get_claim_status with code to retrieve the real app id and install snippet. Requires url or appName (errors otherwise). Use this whenever no real LEXVIBE_APP_ID is configured, so hosted policies, consent proof and auto-updates get linked to the user's account; creates nothing until the user confirms the link.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Public URL of the app: a website URL when answers.platformType includes 'web', or the App Store / Google Play listing URL when it's mobile-only (ios/android without web). LexVibe scans whichever kind of URL is provided on confirmation. | |
| facts | No | scan_project's `facts` object as-is: { authMethods: (apple/google/email/other)[], payments: apple_iap/google_play/stripe/other/none, ai: { userFacing, serverSide, processesPersonalData, providers }, tracking: { idfa, att, adSdks }, devicePermissions: string[] }. Pass it through unchanged — it anchors the generated documents in evidence. | |
| answers | No | Compliance flags you already know (pass scan_project's suggestedAnswers): usesAnalytics, processesPayments, usesGenerativeAI, collectsEmails, sharesWithThirdParties, platformType, companyEntity, contactEmail… | |
| appName | No | App / business name (required if no url is provided). | |
| locales | No | scan_project's `locales` — ISO 639-1 language codes the app actually supports, e.g. ['en', 'es']. | |
| markets | No | Regions where the app has users; each market pack cites its own frameworks: eu → GDPR/ePrivacy, uk → UK GDPR/PECR, us → CCPA/CPRA, ca → PIPEDA, latam → LGPD…; 'global' is NOT a union of the others — it only cites generic OECD international privacy best practices, for users outside every listed market. To cover several specific frameworks, list each market explicitly, e.g. ['eu', 'us', 'latam']. Defaults to [eu]. | |
| signals | No | scan_project's `signals` — detected processing with vendor names. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes the claim-link expiration (30 minutes), the need for user confirmation, and the follow-up call to get_claim_status. This adds significant value beyond annotations by explaining the mutation's deferred nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Around 150 words, covering all key points. Could be slightly more concise, but information density is good and front-loaded with core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter tool with nested objects and no output schema, the description covers the workflow, return values, and motivation. Lacks error cases or rate limits, but openWorldHint allows flexibility.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with good parameter descriptions, but the description adds a crucial constraint: 'Requires url or appName (errors otherwise)', which is not in the schema's required list. This provides decision guidance beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it creates a real LexVibe app, replaces a placeholder, and returns a claim URL with code and expiry. It distinguishes from sibling tools like get_claim_status by describing the post-confirmation step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use this whenever no real LEXVIBE_APP_ID is configured' and requires either `url` or `appName`. Provides clear context for when to invoke this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_policiesARead-onlyInspect
Generate the legal documents (privacy policy, terms of service and, if applicable, an AI disclosure) localized and tailored to the target markets' frameworks (GDPR, UK GDPR, CCPA/CPRA, PIPEDA, LGPD…). Returns {documents: [{docType, locale, content, source}]} where content is Markdown and source is 'ai' or 'template' (template ⇒ not yet personalized — tell the user). Documents are returned only, never written to disk (make_compliant writes them to /legal) and nothing is persisted server-side. Run scan_project first and pass its suggestedAnswers as answers so the documents disclose the right processing; requires network access to the LexVibe API.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | No | Data controller / legal entity (person or company legally responsible), e.g. 'Acme Labs S.L.'. If omitted, the documents keep a [to complete] placeholder. | |
| answers | No | Compliance flags; pass scan_project's suggestedAnswers. Recognized keys: usesAnalytics, processesPayments, usesGenerativeAI, collectsEmails, sharesWithThirdParties, platformType. | |
| appName | Yes | App / business name shown in the documents, e.g. 'Acme Notes'. | |
| locales | No | Languages to generate the documents in (ISO 639-1). Defaults to the markets' main languages; anonymous calls are capped at 3 locales. Pass scan_project's `locales` to match the languages the app actually ships. | |
| markets | Yes | Regions where the app has users (at least one). Each market pack cites its own frameworks: eu → GDPR/ePrivacy, uk → UK GDPR/PECR, us → CCPA/CPRA, ca → PIPEDA, latam → LGPD…; 'global' is NOT a union of the others — it only cites generic OECD international privacy best practices, for users outside every listed market. To cover several specific frameworks, list each market explicitly, e.g. ['eu', 'us', 'latam']. | |
| contactEmail | No | Privacy contact email published in the documents. If omitted, a [to complete] placeholder is left. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint=true and destructiveHint=false. The description adds key details: documents are returned only, never persisted server-side, and template source means not yet personalized. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single focused paragraph front-loaded with purpose. Every sentence adds value: purpose, prerequisite, behavior, return format, and distinction from sibling. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 6 parameters, nested objects, and no output schema, the description covers all critical aspects: return structure (documents array with fields), special values (template source), prerequisite (scan_project), and network requirement. It compensates fully for the missing output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, each parameter has a description. The description adds contextual meaning: explains relationship between 'answers' and 'scan_project', clarifies 'global' market is not a union, and describes the return format. This adds significant value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool generates legal documents (privacy policy, terms of service, AI disclosure) with localization and market-specific frameworks. It distinguishes from siblings like 'make_compliant' and 'scan_project', providing a specific verb and resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to 'Run scan_project first and pass its suggestedAnswers as `answers`', indicates the tool requires network access to an API, and clarifies that persistence is handled by another tool ('make_compliant'). This provides clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_claim_statusARead-onlyInspect
Check whether the user has confirmed a claim created with claim_app. Returns {status: 'pending' | 'expired' | 'claimed', …}. While 'pending', wait a few seconds and call again (the link expires in 30 minutes; 'expired' ⇒ create a new claim). Once 'claimed' it adds the REAL appId, the install snippet, the hosted policyUrl, published (if false, do NOT install the snippet yet — the policy page would be a dead link until the user publishes from their dashboard) and a pending list of details the code can't know (e.g. the controller's legal name): replace any YOUR_APP_ID placeholder snippet with the real one and ask the user for the pending items. Errors on an unknown code.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | The claim code returned by claim_app (not the URL — the `code` field). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, and the description reinforces this by explaining the tool only reads status. It adds critical behavioral context like expiration timing, condition for not installing snippet, and error handling for unknown codes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Despite being lengthy, every sentence provides essential information. The structure flows logically from status outcomes to action items, and there is no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description fully compensates by describing the return structure and behavior for each case. It covers the lifecycle from pending to claimed, including edge cases like expired and errors.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes the 'code' parameter, but the description adds the crucial clarification that it must be the `code` field from claim_app, not the URL. This adds value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool checks claim status and specifies the different return states and their implications. It distinguishes itself from siblings like claim_app (which creates the claim) by focusing on status checking.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit instructions on how to handle each status: wait and retry for pending, recreate for expired, and detailed steps for claimed including not installing snippet if published is false. This gives clear when-to-use and follow-up actions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
install_snippetAIdempotentInspect
Insert the LexVibe cookie-banner + hosted-policies snippet into an HTML file, right before . By default the banner is themed to match the app's own colors, fonts and radius (detected from its stylesheets). Idempotent: if the snippet is already in the file, nothing changes. If the file has no literal (e.g. a Next.js App Router layout.tsx), it does NOT modify the file: it returns the snippet plus exact instructions for you (the dev agent) to add it as JSX — it never corrupts user files. After deploying, confirm with verify_snippet that the snippet is live.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Path of the file to install into (index.html, app/layout.tsx…). | |
| lang | No | Force the banner's language as an ISO 639-1 code, e.g. 'en' or 'es' (one of the 12 LexVibe locales). Defaults to the page's own language. | |
| appId | No | LexVibe app id, e.g. from claim_app/get_claim_status (defaults to the LEXVIBE_APP_ID env var; without either, the YOUR_APP_ID placeholder is used and flagged). | |
| theme | No | auto (default): match the banner to this app's colors, fonts and radius. off: LexVibe default look. | |
| accent | No | Banner accent color as a CSS hex value, e.g. #4f46e5. Defaults to the color detected from the app's own styles (see `theme`). | |
| position | No | Where the banner sits on screen: bottom (full-width bar), bottom-left or bottom-right (floating card in that corner). Defaults to bottom. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description significantly extends beyond annotations. It discloses idempotency, safe handling of non-HTML files (no corruption), behavior when </head> is missing (returns instructions instead of modifying), and the need for deployment verification. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (5-6 sentences) with a clear front-loaded main action. Every sentence adds essential information, with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description fully explains tool behavior: what it does, idempotency, handling of edge cases (non-HTML files), and follow-up action (verify_snippet). Complete for its complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline 3. The description adds minimal extra meaning beyond schema defaults (e.g., lang defaults to page language, appId from env). No substantial additional semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool inserts a LexVibe cookie-banner and hosted-policies snippet into an HTML file before </head>. It distinguishes itself from sibling tools like verify_snippet, scan_project, etc., which have different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context (installing snippet) and mentions post-installation verification with verify_snippet, but does not explicitly list when to use or not use this tool versus alternatives. Still clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
make_compliantAInspect
One-step legal compliance: scan the project, generate privacy policy / terms / cookie & AI disclosures (written as Markdown to /legal), install the cookie-banner snippet before (web only; skipped for native apps, and JSX layouts get manual instructions instead of being modified), and classify EU AI Act risk. Use this first when the user asks to make their app legally compliant, GDPR-ready, or to add a privacy policy or cookie banner; use check_compliance instead for a read-only report. Returns {done, filesWritten, documents, source, snippet, aiAct, missingFacts, agentPrompt, nextSteps} — if source is 'template' or missingFacts is non-empty, answer the agentPrompt and re-run with appName/entity/contactEmail/markets for complete documents. Aborts without writing anything if dir does not exist or is not a project root.
| Name | Required | Description | Default |
|---|---|---|---|
| dir | Yes | Path of the project root to analyze (absolute paths are safest). | |
| lang | No | Force the banner's language as an ISO 639-1 code, e.g. 'en' or 'es' (one of the 12 LexVibe locales). Defaults to the page's own language. | |
| appId | No | LexVibe app id (defaults to the LEXVIBE_APP_ID env var). Without a real id the snippet uses the YOUR_APP_ID placeholder and the result tells you to call claim_app. | |
| accent | No | Banner accent color as a CSS hex value, e.g. #4f46e5. Defaults to the LexVibe accent. | |
| entity | No | Data controller / legal entity, if already known (overrides the derived one). | |
| appName | No | App / business name. If omitted, it's derived from the repo (package.json / LICENSE). | |
| markets | No | Regions where the app has users; they decide which frameworks the documents cover (eu → GDPR, uk → UK GDPR, us → CCPA/CPRA…). Defaults to ["eu"] — confirm with the user before accepting that default. | |
| position | No | Where the banner sits on screen: bottom (full-width bar), bottom-left or bottom-right (floating card in that corner). Defaults to bottom. | |
| contactEmail | No | Privacy contact email, if already known (overrides the derived one). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses detailed behavior including: writes to <dir>/legal, installs cookie banner only for web apps, skips for native apps, gives manual instructions for JSX layouts, aborts if dir doesn't exist. It also explains the return value structure and the conditional re-run logic. This goes well beyond the annotations (readOnlyHint: false, openWorldHint: true) and provides complete transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph that effectively front-loads the main purpose and then provides detailed caveats and return info. For the complexity involved, it is reasonably concise, though it could potentially be broken into bullet points for easier scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema is provided, but the description fully documents the return value structure and explains how to interpret the fields (e.g., agentPrompt, missingFacts). It covers all major behaviors (document generation, banner installation, AI Act classification, conditional execution) and edge cases (JSX, native apps, missing dir). Given the tool's complexity, this is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds value by explaining defaults (appId from env var, markets to eu), constraints, and the need to confirm the default markets with the user. It also clarifies when parameters are optional (e.g., appName derived from repo). This extra context justifies a score of 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with 'One-step legal compliance' and enumerates specific actions (scan, generate documents, install cookie banner, classify AI Act risk). It distinguishes from sibling check_compliance by explicitly stating when to use each, making the purpose crystal clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use ('when user asks to make app legally compliant, GDPR-ready, or to add privacy policy or cookie banner') and when to use check_compliance instead ('for a read-only report'). Also explains abort conditions and re-run triggers, providing comprehensive usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_projectARead-onlyInspect
Read-only scan of a local project (dependencies + source code + mobile manifests). Detects data processing relevant to legal compliance — analytics, payments, generative AI (distinguishing user-facing AI from server-side-only AI), email collection, third-party sharing — and returns {signals, suggestedAnswers, facts, locales, platforms}: per-vendor signals, compliance flags in suggestedAnswers, structured facts (auth methods, payments channel, AI flags, tracking/IDFA, device permissions), the locales the app supports and the product platforms (web / iOS / Android). Run it first: pass suggestedAnswers to generate_policies, and facts, locales and signals to claim_app so the generated documents are anchored in evidence. Never modifies files; errors if dir does not exist or is not a project root. For a deployed site whose code you don't have, use check_website instead.
| Name | Required | Description | Default |
|---|---|---|---|
| dir | Yes | Path of the project root to analyze (absolute paths are safest). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds further context: 'Never modifies files', error conditions (dir does not exist or not a project root), and details about return structure. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with key action and purpose. It is slightly verbose but each sentence adds meaningful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description fully explains the return format and fields. It also covers prerequisites, post-processing steps, and siblings. Complete for a single-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a single param 'dir' described. Description adds value by explaining error behavior if dir is invalid and suggesting using absolute paths.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs a read-only scan of a local project for legal compliance detection. It specifies the resource (local project) and action (scan), and distinguishes from sibling tool check_website for deployed sites.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to 'Run it first' and describes how to pass results to generate_policies and claim_app. Also provides alternative: use check_website for deployed sites without code access.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_snippetARead-onlyInspect
Verify that the LexVibe cookie-banner snippet is actually LIVE on a deployed site: fetches the public URL and looks for the widget marker in the served HTML. Run it after deploying (install_snippet edits local files — this confirms the change reached production). Only public http(s) hosts are allowed — localhost, private-network and reserved addresses are rejected. Returns {status: 'ok' | 'missing' | 'unknown'}. If 'missing', the snippet was not found: check that the deploy included the change, or re-run install_snippet and deploy again.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Public URL (or bare domain) of the deployed site to verify, e.g. https://myapp.com or myapp.com. Must be publicly reachable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, consistent with the read-only nature. The description adds detail on behavior: fetches the public URL, looks for widget marker, validates URL (rejects private/localhost). It also explains the exact return format and meanings. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: 4 sentences covering purpose, usage context, constraints, and return values. It is front-loaded with the main action. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple verification tool with one parameter and no output schema, the description is complete. It covers what, why, when, constraints, and result interpretation. Annotations handle safety, so the description meets all needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already has a good description for the url parameter (100% coverage). The tool description adds further constraint: 'Only public http(s) hosts are allowed — localhost, private-network and reserved addresses are rejected,' which is not in the schema. This adds meaningful context beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool verifies that the LexVibe cookie-banner snippet is live on a deployed site. It distinguishes from the sibling tool install_snippet by noting that install_snippet edits local files while this confirms production. The verb 'verify' and specific resource 'snippet live on deployed site' are precise.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use ('Run it after deploying') and gives constraints ('Only public http(s) hosts allowed'). It provides alternative actions if the snippet is missing ('check that the deploy included the change, or re-run install_snippet and deploy again'). This is comprehensive guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
1 tool update
v0.1.12- Changed
claim_app1 field changed- changed
Input schema / properties / url / descriptionPrevious value: -"Public URL of the app (website or App Store / Google Play listing). LexVibe scans it on confirmation."New value: +"Public URL of the app: a website URL when answers.platformType includes 'web', or the App Store / Google Play listing URL when it's mobile-only (ios/android without web). LexVibe scans whichever kind of URL is provided on confirmation."
6 tool updates
v0.1.11- Changed
check_compliance1 field changed- changed
Input schema / properties / dir / descriptionPrevious value: -"Project root path."New value: +"Path of the project root to analyze (absolute paths are safest)."
- Changed
claim_app3 fields changed- changed
Input schema / properties / facts / descriptionPrevious value: -"scan_project's `facts` (structured evidence: auth methods, payments, AI flags, tracking, device permissions). Pass it through unchanged — it anchors the generated documents in evidence."New value: +"scan_project's `facts` object as-is: { authMethods: (apple/google/email/other)[], payments: apple_iap/google_play/stripe/other/none, ai: { userFacing, serverSide, processesPersonalData, providers }, tracking: { idfa, att, adSdks }, devicePermissions: string[] }. Pass it through unchanged — it anchors the generated documents in evidence." - changed
Input schema / properties / locales / descriptionPrevious value: -"scan_project's `locales` — languages the app actually supports."New value: +"scan_project's `locales` — ISO 639-1 language codes the app actually supports, e.g. ['en', 'es']." - changed
Input schema / properties / markets / descriptionPrevious value: -"Regions where the app has users. Defaults to [eu]."New value: +"Regions where the app has users; each market pack cites its own frameworks: eu → GDPR/ePrivacy, uk → UK GDPR/PECR, us → CCPA/CPRA, ca → PIPEDA, latam → LGPD…; 'global' is NOT a union of the others — it only cites generic OECD international privacy best practices, for users outside every listed market. To cover several specific frameworks, list each market explicitly, e.g. ['eu', 'us', 'latam']. Defaults to [eu]."
- Changed
generate_policies1 field changed- changed
Input schema / properties / markets / descriptionPrevious value: -"Regions where the app has users (at least one). Each market pack cites its frameworks: eu → GDPR/ePrivacy, uk → UK GDPR/PECR, us → CCPA/CPRA, ca → PIPEDA, latam → LGPD…; 'global' covers all of them at the highest common bar."New value: +"Regions where the app has users (at least one). Each market pack cites its own frameworks: eu → GDPR/ePrivacy, uk → UK GDPR/PECR, us → CCPA/CPRA, ca → PIPEDA, latam → LGPD…; 'global' is NOT a union of the others — it only cites generic OECD international privacy best practices, for users outside every listed market. To cover several specific frameworks, list each market explicitly, e.g. ['eu', 'us', 'latam']."
- Changed
install_snippet2 fields changed- changed
Input schema / properties / lang / descriptionPrevious value: -"Force the banner language (default: the page's)."New value: +"Force the banner's language as an ISO 639-1 code, e.g. 'en' or 'es' (one of the 12 LexVibe locales). Defaults to the page's own language." - changed
Input schema / properties / position / descriptionPrevious value: -"Where the banner sits on screen."New value: +"Where the banner sits on screen: bottom (full-width bar), bottom-left or bottom-right (floating card in that corner). Defaults to bottom."
- Changed
make_compliant3 fields changed- changed
Input schema / properties / dir / descriptionPrevious value: -"Project root path."New value: +"Path of the project root to analyze (absolute paths are safest)." - changed
Input schema / properties / lang / descriptionPrevious value: -"Force the banner language (default: the page's)."New value: +"Force the banner's language as an ISO 639-1 code, e.g. 'en' or 'es' (one of the 12 LexVibe locales). Defaults to the page's own language." - changed
Input schema / properties / position / descriptionPrevious value: -"Where the banner sits on screen."New value: +"Where the banner sits on screen: bottom (full-width bar), bottom-left or bottom-right (floating card in that corner). Defaults to bottom."
- Changed
verify_snippet1 field changed- changed
Input schema / properties / url / descriptionPrevious value: -"Public URL (or bare domain) of the deployed site to verify."New value: +"Public URL (or bare domain) of the deployed site to verify, e.g. https://myapp.com or myapp.com. Must be publicly reachable."
7 tool updates
v0.1.10- Changed
check_ai_act15 fields changed- added
Input schema / properties / annexIII / descriptionAdded value: +"Annex III high-risk domains the system operates in: biometrics, critical (infrastructure), education, employment (HR/hiring), essential (credit, insurance, benefits), law (enforcement), migration, justice. Empty if none apply." - added
Input schema / properties / annexIII / items / enumAdded value: +[ + "biometrics", + "critical", + "education", + "employment", + "essential", + "law", + "migration", + "justice" +] - added
Input schema / properties / automatedDecisions / descriptionAdded value: +"Does it make automated decisions with legal or similarly significant effects on people (credit, hiring, admissions…)? Adds GDPR art. 22 duties; high risk only if an Annex III domain applies." - added
Input schema / properties / biometricCategorisationSensitiveAdded value: +{ + "default": false, + "description": "Does it use biometric data (face, voice, gait…) to infer sensitive attributes — race, political opinion, religion, trade-union membership, sexual orientation (art. 5.1.g)? Prohibited. Ordinary face-unlock or liveness checks that don't infer these attributes are NOT this.", + "type": "boolean" +} - added
Input schema / properties / embeddedInRegulatedProductAdded value: +{ + "default": false, + "description": "Is the AI a safety component embedded in an Annex I regulated product (toys, machinery, medical devices…)? High risk via art. 6.1, deadline Aug 2, 2028.", + "type": "boolean" +} - added
Input schema / properties / emotionRecognitionWorkEducationAdded value: +{ + "default": false, + "description": "Does it infer emotions (frustration, attention, mood…) from employees at work or students in education, e.g. to flag disengaged staff or bored students (art. 5.1.f)? Prohibited. Emotion inference on end users of a public consumer product (not their employees/students) is NOT this.", + "type": "boolean" +} - added
Input schema / properties / generatesContent / descriptionAdded value: +"Does it generate text, images, audio or video shown to users? Triggers the art. 50 duty to label AI-generated content." - added
Input schema / properties / individualPredictivePolicingAdded value: +{ + "default": false, + "description": "Predicting an individual's criminal risk based solely on profiling or personality traits (art. 5.1.d)? Prohibited.", + "type": "boolean" +} - added
Input schema / properties / interactsWithPeople / descriptionAdded value: +"Do people interact directly with the AI (chatbot, voice assistant…)? Triggers the art. 50 duty to disclose they are talking to an AI." - added
Input schema / properties / manipulativeOrExploitativeAdded value: +{ + "default": false, + "description": "Does it use subliminal techniques beyond a person's consciousness, or exploit a known vulnerability (age, disability, specific social or economic situation) to materially distort behavior and cause harm — e.g. dark patterns targeting a diagnosed gambling addiction (art. 5.1.a-b)? Prohibited. Ordinary persuasive marketing or UX nudges aimed at the general population are NOT this.", + "type": "boolean" +} - added
Input schema / properties / realtimeBiometricLawEnforcement / descriptionAdded value: +"Only if realtimeBiometricPublic: is it used for LAW ENFORCEMENT purposes? That combination is prohibited (art. 5.1.h) and already in force." - added
Input schema / properties / realtimeBiometricPublic / descriptionAdded value: +"Real-time remote biometric identification in publicly accessible spaces (e.g. live face recognition)? High risk (Annex III biometrics) — prohibited only when combined with realtimeBiometricLawEnforcement." - added
Input schema / properties / socialScoring / descriptionAdded value: +"Does it score people's social behavior or traits causing detrimental treatment in unrelated contexts, or disproportionate to the behavior (art. 5.1.c)? Prohibited. A seller rating or fitness points app is NOT this." - added
Input schema / properties / untargetedFaceScrapingAdded value: +{ + "default": false, + "description": "Does it untargetedly scrape facial images from the internet or CCTV footage to build or expand a face-recognition database (art. 5.1.e)? Prohibited. Matching a user's own consented selfie against their own ID photo is NOT this.", + "type": "boolean" +} - added
Input schema / properties / usesAI / descriptionAdded value: +"Does the product use AI at all (LLM calls, recommendations, computer vision…)? false ⇒ minimal risk, the AI Act does not apply."
- Changed
check_website1 field changed- changed
Input schema / properties / url / descriptionPrevious value: -"Public URL (or bare domain) of the deployed site, e.g. https://myapp.com"New value: +"Public URL (or bare domain) of the deployed site, e.g. https://myapp.com or myapp.com. Must be publicly reachable."
- Changed
generate_policies5 fields changed- added
Input schema / properties / appName / descriptionAdded value: +"App / business name shown in the documents, e.g. 'Acme Notes'." - added
Input schema / properties / contactEmail / descriptionAdded value: +"Privacy contact email published in the documents. If omitted, a [to complete] placeholder is left." - changed
Input schema / properties / entity / descriptionPrevious value: -"Data controller / legal entity."New value: +"Data controller / legal entity (person or company legally responsible), e.g. 'Acme Labs S.L.'. If omitted, the documents keep a [to complete] placeholder." - added
Input schema / properties / locales / descriptionAdded value: +"Languages to generate the documents in (ISO 639-1). Defaults to the markets' main languages; anonymous calls are capped at 3 locales. Pass scan_project's `locales` to match the languages the app actually ships." - added
Input schema / properties / markets / descriptionAdded value: +"Regions where the app has users (at least one). Each market pack cites its frameworks: eu → GDPR/ePrivacy, uk → UK GDPR/PECR, us → CCPA/CPRA, ca → PIPEDA, latam → LGPD…; 'global' covers all of them at the highest common bar."
- Changed
get_claim_status1 field changed- changed
Input schema / properties / code / descriptionPrevious value: -"The claim code returned by claim_app."New value: +"The claim code returned by claim_app (not the URL — the `code` field)."
- Changed
install_snippet3 fields changed- added
Input schema / properties / accent / descriptionAdded value: +"Banner accent color as a CSS hex value, e.g. #4f46e5. Defaults to the color detected from the app's own styles (see `theme`)." - changed
Input schema / properties / appId / descriptionPrevious value: -"App id (defaults to LEXVIBE_APP_ID)."New value: +"LexVibe app id, e.g. from claim_app/get_claim_status (defaults to the LEXVIBE_APP_ID env var; without either, the YOUR_APP_ID placeholder is used and flagged)." - changed
Input schema / properties / file / descriptionPrevious value: -"File to install into (index.html, app/layout.tsx…)."New value: +"Path of the file to install into (index.html, app/layout.tsx…)."
- Changed
make_compliant3 fields changed- added
Input schema / properties / accent / descriptionAdded value: +"Banner accent color as a CSS hex value, e.g. #4f46e5. Defaults to the LexVibe accent." - changed
Input schema / properties / appId / descriptionPrevious value: -"LexVibe app id (defaults to LEXVIBE_APP_ID)."New value: +"LexVibe app id (defaults to the LEXVIBE_APP_ID env var). Without a real id the snippet uses the YOUR_APP_ID placeholder and the result tells you to call claim_app." - added
Input schema / properties / markets / descriptionAdded value: +"Regions where the app has users; they decide which frameworks the documents cover (eu → GDPR, uk → UK GDPR, us → CCPA/CPRA…). Defaults to [\"eu\"] — confirm with the user before accepting that default."
- Changed
scan_project1 field changed- changed
Input schema / properties / dir / descriptionPrevious value: -"Path to the project to analyze (repo root)."New value: +"Path of the project root to analyze (absolute paths are safest)."
10 tool updates
v0.1.9- First observed
check_ai_act - First observed
check_compliance - First observed
check_website - First observed
claim_app - First observed
generate_policies - First observed
get_claim_status - First observed
install_snippet - First observed
make_compliant - First observed
scan_project - First observed
verify_snippet
TDQS
Most tools have distinct purposes, but there is potential confusion between generate_policies and make_compliant (both generate documents) and between scan_project and check_compliance (both scan projects). However, detailed descriptions help differentiate them, and the overlap is intentional for different use cases.
All tool names follow a consistent verb_noun pattern in snake_case, e.g., check_compliance, install_snippet, get_claim_status. The naming is predictable and clear, making it easy for an agent to infer functionality.
With 10 tools, the set covers the legal compliance workflow comprehensively without bloat. Each tool serves a clear role, from scanning to generation to installation and verification, and the count feels appropriate for the domain.
The tool set covers the full lifecycle: scanning (scan_project, check_website), compliance checking (check_compliance, check_ai_act), policy generation, snippet installation, verification, and account linking. Minor gaps like no explicit tool for updating existing policies are mitigated by make_compliant which regenerates them.
Maintenance
Related MCP Connectors
Compliance & security scan for your app: secrets, exposed files, headers, privacy, AI-disclosure.
EU AI Act + GDPR compliance scanner. One call, no arguments, 10 seconds. 22 AI frameworks detected.
Compliance lint for AI, scraping, and privacy law. Cited findings in 200 or more jurisdictions.
Compliant legal documents from your AI assistant: 1,100+ templates, 15 countries, free preview.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceThe only Multi-LLM Compliance Engine (GPT-4o + Claude + DeepSeek). Auto-fix GDPR/LGPD risks and more 15 frameworks. code.guard.eu31MIT
- FlicenseBqualityNot gradedmaintenanceEnables the generation of professional, jurisdiction-specific legal documents like privacy policies, terms of service, and cookie policies. It allows users to produce structured HTML legal content by providing specific parties, terms, and service configurations to an AI-driven tool.1-
- AlicenseAqualityAmaintenanceFill standard legal agreement templates (NDAs, SAFEs, NVCA docs, employment, cloud terms) and produce DOCX files.31,57253Apache 2.0
- AlicenseAqualityDmaintenanceScans codebases for AI system usage and generates EU AI Act compliance reports.463MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/marcosnovo/lexvibe-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server