AI-native task management for Claude and ChatGPT with automatic sync across platforms
Do not connect
A critical issue was found. Do not connect this server as-is.
Scanned 28 days ago Due for re-check
A server can change after it's graded. Re-run the automated scan to refresh this report.
This grade is deterministic and reproducible: the same server surface always yields the same grade under a given algorithm version. It is a real automated assessment computed by the MCPGrade engine from what the probe actually observed — not a fabricated or opinion score. It is not a manual human pentest, so it can miss context-specific risks.
Every signal below was measured directly by the automated probe. The grade is derived only from evidence like this — nothing is assumed.
The leni MCP server exposes 17 tools, focused primarily on web capabilities. Its published description reads: "AI-native task management for Claude and ChatGPT with automatic sync across platforms". It communicates over Streamable HTTP using the 2026-07-28 protocol revision, and does not require authorization to connect. MCPGrade currently rates leni F — a critical issue was found and the server should not be connected as-is. Its most notable findings include "Cross-tool shadowing" and "Cross-tool shadowing". This report is a deterministic, reproducible automated assessment: the same observed surface always yields the same grade under a given algorithm version, and it is refreshed as new scans arrive and free to read — but it is not a substitute for a manual human security review. Always re-check leni's advertised tools, transport security, and authorization posture before connecting an autonomous agent or sharing sensitive context with it.
Add leni to an MCP client using the endpoint below. Review the grade and findings above before granting an autonomous agent access.
MCP endpoint
https://www.heyleni.ai/mcpStreamable HTTP transport. This is the MCP endpoint, not a website — paste it into your MCP client server list rather than a browser.
Captured passively during the read-only scan. Click any value to find servers that match it.
The tools this server advertises via tools/list — names, purposes, and the parameters each accepts, exactly as enumerated read-only.
ChatGPT Deep Research ONLY. DO NOT USE for normal conversations. ⚠️ CRITICAL: ONLY for ChatGPT Deep Research feature (user says "research"/"deep dive") - Normal operations → use leni_find_tasks, leni_
ChatGPT Deep Research ONLY. DO NOT USE for normal conversations. ⚠️ CRITICAL: ONLY for ChatGPT Deep Research after 'search' tool - Normal → use leni_find_tasks for task details - Fetches single task b
Create one or multiple tasks. Returns undo_id for 72-hour reversal. USE FOR: - New tasks, TODOs, reminders, action items - Bulk creation from lists NOT FOR: - Update existing → leni_update_task - Find
Sorted worst-first. Each finding shows its severity, what it means, its OWASP MCP Top-10 mapping, and a recommended fix — the check id links to the exact methodology row that produced it.
tool: search
A tool description tries to alter the model’s use of another tool.
s IDs only (use fetch for details) - Excludes DONE/archived USE: ChaRecommendationDescriptions must describe only their own tool.
tool: fetch
A tool description tries to alter the model’s use of another tool.
Research after 'search' tool - Normal → use leni_find_tasks for task dRecommendationDescriptions must describe only their own tool.
tool: leni_create_task
A tool description tries to alter the model’s use of another tool.
- Find tasks → leni_find_tasks NATURAL LANGUAGE EXAMPLES: "Add buy groceries"RecommendationDescriptions must describe only their own tool.
tool: leni_find_tasks
A tool description tries to alter the model’s use of another tool.
finding tasks. Search/filter with OR/AND logic. USE FOR: - UnderstanRecommendationDescriptions must describe only their own tool.
tool: leni_complete_task
A tool description tries to alter the model’s use of another tool.
other fields → leni_update_task - Archive → leni_archive_task NATURAL LANGUAGERecommendationDescriptions must describe only their own tool.
tool: leni_update_task
A tool description tries to alter the model’s use of another tool.
not found → Use leni_find_tasks first to verify task exists - Invalid project →RecommendationDescriptions must describe only their own tool.
tool: leni_delete_task
A tool description tries to alter the model’s use of another tool.
️ CRITICAL: Use leni_archive_task for ambiguous removal. This is PERMANENT afterRecommendationDescriptions must describe only their own tool.
tool: leni_archive_task
A tool description tries to alter the model’s use of another tool.
us removal (NOT leni_delete_task). USE FOR: - "remove", "delete", "get rid of",RecommendationDescriptions must describe only their own tool.
tool: leni_restore_task
A tool description tries to alter the model’s use of another tool.
Find archived → leni_find_tasks {archived: true} NATURAL LANGUAGE EXAMPLES: "RRecommendationDescriptions must describe only their own tool.
tool: leni_create_project
A tool exposes a free-text/webhook/feedback parameter with no honest purpose — a classic exfil channel.
parameter "notes"RecommendationRemove side-channel parameters; constrain tool inputs.
tool: leni_create_project
A tool description tries to alter the model’s use of another tool.
reate project → leni_create_task {projectName: "Website Redesign"} RESPONSE: BrRecommendationDescriptions must describe only their own tool.
tool: leni_find_projects
A tool description tries to alter the model’s use of another tool.
sting projects. Search with fuzzy typo-tolerance or list all. USE FORRecommendationDescriptions must describe only their own tool.
tool: leni_update_project
A tool exposes a free-text/webhook/feedback parameter with no honest purpose — a classic exfil channel.
parameter "notes"RecommendationRemove side-channel parameters; constrain tool inputs.
tool: leni_update_project
A tool description tries to alter the model’s use of another tool.
d) MATCH: Fuzzy search (typo-tolerant), then ILIKE fallback DISAMBIGURecommendationDescriptions must describe only their own tool.
tool: leni_get_task_history
A tool description tries to alter the model’s use of another tool.
100) WORKFLOW: leni_find_tasks → leni_get_task_history → leni_undo_task_changeRecommendationDescriptions must describe only their own tool.
tool: leni_undo_task_change
A tool description tries to alter the model’s use of another tool.
chived: true to search archived tasks only) WORKFLOW: 1. leni_get_tasRecommendationDescriptions must describe only their own tool.
tool: leni_undo
A tool description tries to alter the model’s use of another tool.
le field undo → leni_undo_task_change (more granular, reverts one property) NATURALRecommendationDescriptions must describe only their own tool.
tool: leni_list_recent_operations
A tool description tries to alter the model’s use of another tool.
ration 5. Call: leni_undo {undo_id: "abc-123"} RESPONSE: List with operaRecommendationDescriptions must describe only their own tool.
tool: leni_show_tasks
A tool description tries to alter the model’s use of another tool.
n filter, sort, search, and manage tasks directly in the embedded viewRecommendationDescriptions must describe only their own tool.
tool: (server instructions)
A tool description tries to alter the model’s use of another tool.
d of multiple tool calls ## Multi-Tool Call Patterns ### When to Use SINRecommendationDescriptions must describe only their own tool.
The server accepts tool enumeration (and likely invocation) with no authentication.
RecommendationRequire OAuth 2.1 authorization for any server exposing non-public tools.
tool: (server instructions)
Role tokens or delimiter abuse steer the model rather than describe the tool.
mutation): ``` User: "Move all LATER tasks to TODO" AI → leni_updateRecommendationWrite neutral, descriptive tool metadata.
tool: leni_update_task
An unusually long description is a common injection-padding tactic.
description length 2191 charsRecommendationKeep descriptions concise.
The server exposes one or more ui:// (MCP Apps) resources whose HTML/JS renders inside the host client — a client-side injection / data-exposure surface most scanners ignore. Flagged for review, not damning on its own.
1 ui:// resource(s); e.g. ui://app/tasks.htmlRecommendationReview each ui:// resource’s markup and scripts; treat host-rendered UI as untrusted, sandbox it, and never expose secrets or conversation context to it.
Vantaj uptime monitoring via MCP — manage monitors, heartbeats, incidents, and status pages.
Unified gateway to Algeria's TKAWEN ecosystem: commerce, certification, and AI tools.
Provides access to the Cohereon Doctrine AI safety framework with governance components, tiered access, and agent onboarding.
Agentic rails for complex workflows with receipts, fees, and MCP tool access.
Structural TC39 spec lookup for ECMA-262 and ECMA-402 in AI agents, SHA-pinned and offline-first.
Structural TC39 spec lookup for ECMA-262 and ECMA-402 in AI agents, SHA-pinned and offline-first.
AI-native task management for Claude and ChatGPT with automatic sync across platforms
PRIMARY tool for understanding your work and finding tasks. Search/filter with OR/AND logic. USE FOR: - Understanding workload: "what should I work on?", "my tasks", "what's on my plate?" - Finding ta
Mark tasks as DONE (sets status=DONE, completed_at=now). Returns undo_id for 72-hour reversal. USE FOR: - Task done/finished/completed - Marking checkboxes, crossing off items - Bulk completion NOT FO
Update task properties (title, notes, status, priority, dueDate, projectName, assignedTo). Returns undo_id for 72-hour reversal. USE FOR: - Change properties: priority, due date, status, title, notes,
PERMANENTLY delete tasks (EXPLICIT INTENT ONLY). Returns undo_id for 72-hour recovery. ⚠️ CRITICAL: Use leni_archive_task for ambiguous removal. This is PERMANENT after 72 hours. DECISION TREE: User s
Archive tasks (sets archived=true, preserves status). PREFERRED for removal. Returns undo_id for 72-hour reversal. ✅ DEFAULT: Use for ALL ambiguous removal (NOT leni_delete_task). USE FOR: - "remove",
Restore archived tasks (sets archived=false). Returns undo_id for 72-hour reversal. USE FOR: - Unarchive tasks: "restore", "unarchive", "bring back" NOT FOR: - Undo deletion → leni_undo (restores dele
Create new project container for organizing related tasks. USE FOR: - User explicitly requests new project NATURAL LANGUAGE EXAMPLES: "Create Website Redesign project" → {name: "Website Redesign"} "Ma
PRIMARY tool for finding and listing projects. Search with fuzzy typo-tolerance or list all. USE FOR: "Show my projects", "find website project", "list active projects" WHEN USER ASKS ABOUT PROJECTS:
Update project properties (name, notes, status). PERMISSIONS: - Owner: All fields (name, notes, status) - Admin: Name, notes only (NO status/archive) - Members: Cannot update USE FOR: - Rename, update
Get complete change history for a task (who changed what, when). USE FOR: - Debug: "Why changed?", "What happened?" - Audit: "Who changed?", "When updated?" NATURAL LANGUAGE EXAMPLES: "Show history fo
Undo most recent field change on a task (granular single-field undo). USE FOR: - Revert specific property (status, priority, title, etc.) - More granular than leni_undo (one field only) WHEN TO CHOOSE
Undo recent operation by undo_id. Works for all mutations (create, update, complete, delete, archive, restore). GETTING undo_id: - undo_id in context (from previous operation response) → Use directly,
List recent undoable operations (last 72 hours) with undo_id, summary, expiration. USE FOR: - Undo without undo_id: New chat, no context → find undo_id here - Activity review: "What did I do today?" -
Display interactive task list. Users can filter, sort, search, and manage tasks directly in the embedded view. Filters are fully interactive - users can adjust them without going back to the chat.