Notifly
Server Details
Notification workflows, subscribers, topics and delivery activity; trigger a workflow with consent.
- Status
- Healthy
- Uptime
- 34.8% over 48 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 2 tools
The two tools occupy completely separate roles: search_tools discovers available external_<name> declarations, and execute_typescript runs a program that calls them. There is no plausible way to confuse discovery with execution.
Both names follow a strict verb_noun snake_case pattern (execute_typescript, search_tools) with no style mixing. The convention is predictable and readable.
Two tools is thin by typical standards, but this is a deliberate code-mode gateway where all downstream capability is funneled through execute_typescript, so each tool genuinely earns its place. It only falls short of 5 because a slightly larger surface (e.g. a schema-inspection helper) could exist without redundancy.
Discovery plus execution covers the full lifecycle for a code-execution meta-server, and the tools compose cleanly (search first, then execute). The only minor gap is the lack of any richer per-tool introspection or documentation beyond the generated function declarations.
Available Tools
2 toolsexecute_typescriptExecute TypeScriptADestructiveInspect
Run a single TypeScript program in a sandboxed interpreter. The program may call any external_ function declared by search_tools, batching multiple tool calls into one program instead of one MCP round trip per call. Call search_tools first to see what is declared.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | TypeScript source. May call external_<name>(...) functions declared by search_tools. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, openWorldHint=true, and readOnlyHint=false, so the safety profile is covered structurally. The description adds useful context by calling out the 'sandboxed interpreter' and that the program can invoke external declared functions, but it omits error behavior, execution limits, and what happens to side effects the called tools produce.
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 core action, followed by the batching benefit and the prerequisite. No filler sentences.
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 no output schema and a single required parameter, the description covers what the tool does, why to use it, and how to prepare (search_tools). It would be more complete with a note on how results/errors surface, but the essentials for a correct call are present.
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?
Only one parameter at 100% schema coverage, so the schema already documents `code`. The description reinforces that the source may call external_<name>(...) functions, which matches the schema text, adding no real syntax or format detail beyond it. Baseline 3 is appropriate for full 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?
States a specific verb+resource (run a TypeScript program) plus scope (sandboxed interpreter) and the key differentiating capability: calling external_<name> functions to batch tool calls. An agent can distinguish this from the sibling search_tools immediately.
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?
Gives a clear when-to-use rationale (batching multiple tool calls into one program instead of one round trip per call) and an explicit prerequisite (call search_tools first). No when-not or exclusion guidance, but the context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_toolsSearch ToolsARead-onlyIdempotentInspect
Discover the tools reachable with your current authorization, as TypeScript function declarations (external_) for use inside execute_typescript. Call with no arguments to list everything reachable, or a free-text query to narrow by name/description.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Free-text filter over tool name/description (case-insensitive substring) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the bar is lower. The description still adds meaningful behavioral context the annotations lack: results are scoped by current authorization and are emitted as external_<name> declarations consumable inside execute_typescript, which tells the agent the practical consequence of calling it.
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 sentences, zero filler, front-loaded with the core purpose and followed immediately by the invocation variants. Nothing could be cut without losing 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?
With no output schema, the description compensates by specifying the return shape (external_<name> TypeScript declarations) and the authorization scoping. For a single optional-parameter discovery tool, an agent has everything needed to call it 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?
Schema description coverage is 100% and there is only one optional parameter, so the schema already defines the substring-match semantics. The description's 'free-text query to narrow by name/description' largely restates the schema's wording, adding little beyond 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?
States a specific verb and resource ('Discover the tools reachable with your current authorization') and pins down the exact return form (TypeScript function declarations named external_<name>). It also explicitly ties itself to the sibling execute_typescript, so an agent can distinguish the two without opening 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?
Gives explicit usage branches: no arguments to list everything reachable, or a free-text query to narrow by name/description. It clearly frames this as the discovery step preceding execute_typescript, though it never states a when-not-to-use condition.
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
- First observed
execute_typescript - First observed
search_tools
Publisher details
- Operator
- Devino Solutions
- Operator website
- https://devino.ca
- Vendor relationship
- First-party
- Documentation
- https://notifly.io/docs/connecting-ai-assistants
- Trust center
- Not available
- Restrictions
- Requires a Notifly account. Sign in with OAuth when your client asks.
Related MCP Connectors
Send, search, and manage notifications, accounts, and push preferences
Create, test, publish, and manage Dreamlit notification workflows from AI clients.
Web Push (VAPID), Android (FCM), iOS (APNs), In-App Popup, Toast & Transactional Email OTP engine.
- WSENDEROAuthio.wsender
Manage WhatsApp, Telegram and MAX mailings: audiences, drafts, moderation and sending.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceLets AI assistants manage subscribers, trigger workflows, inspect notification events, and tune preferences across any MCP-compatible client.-

Dreamlit MCPofficial
FlicenseNot gradedqualityDmaintenanceLets AI clients create, inspect, test, publish, unpublish, analyze, and style Dreamlit notification workflows.-- AlicenseAqualityBmaintenanceManage your entire notification infrastructure using natural language. Trigger workflows, create users, manage preferences, update tenant branding, and access docs — all from Cursor, Claude Desktop, or Windsurf. 24 tools covering email, SMS, push, WhatsApp, Slack, MS Teams, and in-app notifications.2212MIT
- AlicenseAqualityBmaintenanceLets AI agents send notifications, manage templates and read delivery status.112 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.