leafwright
Server Details
Render HTML, URLs, and templates to PDF. AI drafts templates and fixes them from logs.
- Status
- Healthy
- Uptime
- 97.9% over 35 days
- Last Tested
- Transport
- Streamable HTTP ยท MCP 2025-11-25
- URL
TDQS
Scored across 3 tools
auth_status and login both participate in the login flow (auth_status completes a pending login), which could cause slight confusion, but the three tools are otherwise clearly distinct: start flow, check/complete status, revoke token.
All tools use snake_case with a consistent leafwright_ prefix, though auth_status is a noun phrase while login/logout are verbs, a minor deviation from a strict verb_noun pattern.
Three tools perfectly cover the authentication lifecycle (login, logout, status) without redundancy; each tool earns its place.
Covers the core auth operations, but lacks explicit token refresh or user/organization info retrieval, which could be minor gaps for some workflows.
Available Tools
3 toolsleafwright_auth_statusLeafwright auth statusAInspect
Check whether Leafwright MCP is authenticated. Completes a pending browser login if approved. Pass the device_code returned by leafwright_login when the client has no local storage, which is the case over HTTP.
| Name | Required | Description | Default |
|---|---|---|---|
| device_code | No | The device_code from leafwright_login. Required when the client stores no local auth state. |
Output Schema
| Name | Required | Description |
|---|---|---|
| token | No | |
| status | Yes | |
| next_step | No | |
| user_code | No | |
| expires_at | No | |
| token_source | No | |
| active_project_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=true), and the description adds real context beyond them: this call may finalize a pending browser login and mutates auth state, and it explains the transport-dependent requirement on local storage. It stops short of saying what is returned or whether repeated calls are safe, but the added behavioral detail is meaningful.
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?
Three short sentences, front-loaded with the primary purpose and followed by the secondary behavior and the conditional parameter rule. No filler, though the third sentence slightly overlaps the schema description.
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?
With an output schema present, return values need not be explained, and the description covers the tool's dual behavior, the conditional parameter, and the HTTP/no-local-storage case. It is complete enough to invoke correctly, missing only explicit sibling routing and error/'not approved' behavior.
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 the schema already defines device_code and its conditional requirement. The description largely restates the schema's own wording ('returned by leafwright_login', 'no local storage') without adding format or example detail, so it meets but does not exceed the baseline.
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 states a specific verb+resource ('Check whether Leafwright MCP is authenticated') and clarifies a second behavior ('Completes a pending browser login if approved'), which distinguishes it from leafwright_login/leafwright_logout. It does not explicitly contrast itself with those siblings, but the function and its dual nature are 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?
It gives a concrete condition for supplying device_code ('when the client has no local storage, which is the case over HTTP') and names the source tool, implying a login-then-check sequence. However, it never states the general when-to-use case, when not to call it, or how it relates to logout, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
leafwright_loginLog in to LeafwrightAInspect
Start a browser login flow for Leafwright MCP. Open the returned URL, choose an organization and project, then call leafwright_auth_status.
| Name | Required | Description | Default |
|---|---|---|---|
| client_name | No | Optional client name shown in Leafwright. |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes | |
| next_step | Yes | |
| user_code | Yes | |
| expires_at | Yes | |
| device_code | Yes | |
| verification_url | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare openWorldHint=true, readOnlyHint=false, idempotentHint=false, destructiveHint=false, so the safety profile is covered. The description adds genuinely useful behavior beyond that: the flow is out-of-band (a URL must be opened and the user must make selections), so the agent knows this is not a self-contained call. It stops short of saying what happens if a session already exists or how long the URL stays valid.
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?
Two short sentences, front-loaded with what the tool does and followed by the required next actions. Every clause earns its place; nothing is padding.
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?
With an output schema present, return values need not be explained, and the description covers the initiation flow and the handoff to leafwright_auth_status. The remaining gap is the already-authenticated / repeat-call case, which matters for a non-idempotent tool but is not addressed.
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?
There is one optional parameter (client_name) with 100% schema description coverage, so the schema already carries its meaning. The description never mentions it, adding no semantic value beyond the schema, which matches the baseline of 3 when coverage is high.
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 states a specific verb and resource ('Start a browser login flow for Leafwright MCP') and positions the tool as the entry point in a sequence, pointing to leafwright_auth_status as the follow-up. An agent can distinguish it from leafwright_auth_status and leafwright_logout without inspecting either schema.
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?
It gives explicit step-by-step usage: open the returned URL, pick an organization and project, then call leafwright_auth_status. It does not state when *not* to use it (e.g., if already authenticated, call auth_status instead), which is the only missing guidance for full marks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
leafwright_logoutLog out of LeafwrightADestructiveIdempotentInspect
Revoke the stored Leafwright MCP token and clear local auth state.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly mentions destructive actions ('revoke' and 'clear') which align with the destructiveHint=true annotation. It goes beyond the annotation by specifying exactly what is revoked and cleared, providing concrete behavioral detail. No contradictions with the idempotentHint=true annotation are present.
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, concise sentence that conveys the entire purpose without any fluff. It is well-structured and gets straight to the point.
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 no parameters and a simple, self-contained action, the description is fully complete. The output schema existence (true) is not detailed, but for a logout action, the return value is typically trivial and not necessary to describe. The description covers all necessary information for an agent to use the tool correctly.
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 tool has no parameters, so there is nothing to explain. The schema coverage is complete (100%), and the description adds no unnecessary information. This is a perfect score for parameter 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 action: revoke the stored token and clear local auth state. It precisely identifies the resource (Leafwright MCP token) and the operation, leaving no ambiguity about what the tool does.
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 does not provide any guidance on when to use this tool versus alternatives such as leafwright_auth_status or leafwright_login. It does not mention when logout is appropriate or when it should be avoided, leaving the decision entirely to the agent.
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.
2 tool updates
- Changed
leafwright_auth_status1 field changed- added
Input schema / properties / device_codeAdded value: +{ + "description": "The device_code from leafwright_login. Required when the client stores no local auth state.", + "type": "string" +}
- Changed
leafwright_login2 fields changed- added
Output schema / properties / device_codeAdded value: +{ + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "status", - "verification_url", - "user_code", - "expires_at", - "next_step" -]New value: +[ + "status", + "verification_url", + "user_code", + "device_code", + "expires_at", + "next_step" +]
3 tool updates
- First observed
leafwright_auth_status - First observed
leafwright_login - First observed
leafwright_logout
Related MCP Connectors
Generate HTML to PDF documents in bulk or single โ raw replacements or based on conditions, loops
Turn an HTML template plus JSON into a finished PDF: a quote, invoice, work order or certificate.
JSON in, PDF out. Render invoices, certificates, reports and cards from a template and a payload.
Generate images and PDFs from HTML/CSS, live websites, and reusable templates.
Related MCP Servers
AlicenseNot gradedqualityDmaintenanceEnables AI assistants to generate PDF documents from templates or raw HTML using natural language, with tools for template creation, PDF generation, and utility operations.31 npm1MIT
@sheetrender/mcpofficial
AlicenseAqualityBmaintenanceRenders PDFs from HTML templates or saved templates and spreadsheet data, with batch job support and document retrieval.1182 npm1MIT- AlicenseAqualityCmaintenanceGenerate professional PDFs from Claude, Cursor, and other AI tools. Create invoices, contracts, reports, and certificates from templates or inline HTML markup.755 npm1MIT
- AlicenseNot gradedqualityBmaintenanceTurn HTML or a URL into a pixel-accurate PDF in a single tool call.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.