Skip to main content
Glama

make_compliant

Scan your project, generate privacy policy, terms, cookie & AI disclosures, install a cookie banner, and classify EU AI Act risk to achieve legal compliance in one step.

Instructions

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.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
dirYesPath of the project root to analyze (absolute paths are safest).
langNoForce 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.
appIdNoLexVibe 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.
accentNoBanner accent color as a CSS hex value, e.g. #4f46e5. Defaults to the LexVibe accent.
entityNoData controller / legal entity, if already known (overrides the derived one).
appNameNoApp / business name. If omitted, it's derived from the repo (package.json / LICENSE).
marketsNoRegions 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.
positionNoWhere the banner sits on screen: bottom (full-width bar), bottom-left or bottom-right (floating card in that corner). Defaults to bottom.
contactEmailNoPrivacy contact email, if already known (overrides the derived one).
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

Install Server

Other Tools

Latest Blog Posts

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