Skip to main content
Glama
pushpad

Pushpad MCP

Official
by pushpad

Pushpad MCP

CI npm

Pushpad MCP server for sending web push notifications and managing resources on Pushpad (CRUD actions on notifications, subscriptions, projects and senders) using the Pushpad API.

This project is a thin layer built on top of the Pushpad API, using the official Pushpad OpenAPI spec and FastMCP for TypeScript.

Security

Use of MCP technology to interact with your Pushpad account can come with risks.

This MCP server gives full access to the Pushpad API, which includes irreversible and destructive actions (like update, delete, etc.). The API can also return sensitive data like push subscription keys (Subscriptions API) and VAPID keys (Senders API).

We recommend using an appropriate permission mode in your agent and using a Pushpad token with restricted access.

You can change the permission mode to Manual or set allow / deny permissions for the different tools provided by this MCP server in your agent settings.

We recommend excluding the VAPID keys stored in Senders from your AI context: you can either use a Pushpad token with restricted access or deny the tools that give access to Senders API.

Remember to keep the access token private and never store it in the Git repository.

Related MCP server: Wasapi MCP Server

Installation

Step 1: Set Up Your API Token as an Environment Variable

First, you need to create a new Pushpad token: open the Pushpad dashboard, click your account name, then click Access tokens and create a new token.

Then you need to store the Pushpad token as an environment variable. You can set it globally on your machine (~/.bashrc, ~/.zshrc, or another shell profile), use a password manager (like 1Password CLI), set it in a project specific .env file, or add it directly to the MCP client configuration file (like .mcp.json). Remember to add .env, .mcp.json or other files that may include the secret to .gitignore.

Step 2: Add the MCP Server to Your AI Agent

The local MCP server is launched directly by your MCP client using the settings defined in your MCP JSON configuration file. The exact location of this file and how it is applied depends on your MCP client.

To enable the MCP services, add an entry to the mcpServers block:

{
  "mcpServers": {
    "pushpad": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "pushpad-mcp"],
      "env": {
        "PUSHPAD_TOKEN": "${PUSHPAD_TOKEN}"
      }
    }
  }
}

The above example configures the Pushpad MCP server with ${PUSHPAD_TOKEN}. Replace it with your Pushpad token or use the client-specific method of variable substitution (if available) to keep your token out of the configuration file.

Step 3: Use the Pushpad MCP

Finally you can interact with Pushpad using MCP and your AI agent.

For example:

Use Pushpad to send everyone a notification about XYZ.

Send a notification to user 123 using Pushpad.

How many clicks received the notification 98765?

What is the default TTL for notifications in project 456?

The MCP server supports the full Pushpad API, including the Notifications API, Subscriptions API, Projects API and Senders API.

Development

If you want to contribute to this project, feel free to open an issue or submit a pull request.

If you want to make changes to this package, for local development, you can clone this repo and use VS Code with a dev container for easier setup.

Then you can use the following commands:

  • npm run build to compile the TypeScript project

  • npm run start to start the MCP server

  • npm run inspect to start the MCP server and inspect it with @modelcontextprotocol/inspector

You can set the PUSHPAD_TOKEN in an .env file and it is read automatically.

This repo also includes Claude Code in the dev container and an .mcp.json that you can use to try the local version of this MCP server. This is only useful if you plan to make changes to this package and you want to try the modifed version before submitting a pull request.

License

This MCP server is released under an open source license (MIT).

Available Tools

19 tools
notifications_cancelB

To cancel a scheduled notification, send a DELETE request to /notifications/NOTIFICATION_ID/cancel.

ParametersJSON Schema
NameRequiredDescriptionDefault
notification_idYesThe ID of a notification.

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It only mentions the HTTP request format, not behavioral details like side effects (e.g., irreversible action, permission requirements, or response behavior). The lack of these details is a significant gap.

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 brief and to the point, with no extraneous information. It could be more concise by omitting the technical HTTP example and focusing on semantic intent, but it is not verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has one required parameter and no output schema, the description should clarify the result of cancellation (e.g., success response, error conditions). It fails to provide this, leaving the agent uncertain about what happens after the request.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the parameter notification_id is already described in schema. The description does not add any new meaning beyond referring to the endpoint path, thus baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the tool cancels a scheduled notification, which is a specific verb and resource. It distinguishes from siblings like notifications_create and notifications_get, but could be clearer about what 'cancel' entails (e.g., irreversible removal vs. temporary disabling).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by specifying the HTTP method and endpoint, but does not explain when to cancel (e.g., before notification is sent) or when not to use it (e.g., if already sent). No alternatives are mentioned against sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

notifications_createC

To send a web push notification, send a POST request to /projects/PROJECT_ID/notifications.

ParametersJSON Schema
NameRequiredDescriptionDefault
ttlNoThe number of seconds after which the notification should be dropped if the device of the user is offline.
bodyYesThe main text of the push notification.
tagsNoThe segments that should receive this push notification (i.e. the browsers that have at least one of these tags associated will receive the notification). If both uids and tags are present, only the browsers that match both the conditions will receive the notification (i.e. a browser must be associated to a user ID listed in uids and have at least one of those tags). Instead of simple tags, you can pass boolean expressions that use the operators !, &&, || (from highest to lowest precedence) and can include parentheses. If you pass an array of tags and boolean expressions they are interpreted as ||: the example above is equivalent to "tag0 || tag1 || tagA && !tagB". When the field is omitted or null, it is ignored and the push notification is sent to everyone or to the people specified by uids. When the field is an empty array, the notification will not be sent to anyone.
uidsNoThe users that should receive this push notification. When the field is omitted or null, it is ignored and the push notification is sent to everyone or to the people specified by tags. When the field is an empty array, the notification will not be sent to anyone.
titleNoThe title of the push notification.
silentNoSet to true if you want to disable the notification sound and vibration.
urgentNoSet to true for time-sensitive alerts (e.g. incoming phone call) that must wake up devices that are sleeping.
actionsNoAdd some action buttons to the notification.
send_atNoA time when the notification will be sent.
starredNoBookmark the notification to make it easier to find it from the Pushpad dashboard. You can use this feature to highlight some notifications, for example those that have been sent manually.
icon_urlNoThe url of an image that will be used as the notification icon. Suggested size: 192x192px.
badge_urlNoThe url of a small image (that represents the app or the notification category) that will be displayed when there is not enough space to display the full notification (e.g. Android status bar). Suggested size: 96x96px.
image_urlNoThe url of an image that will be displayed in the notification content. Suggested size: 800px for the longer side.
target_urlNoThe url the user is redirected to when clicks the push notification.
custom_dataNoAn arbitrary string that represents some metadata that you want to attach to the notification. This string is passed as an argument to the JavaScript functions binded to the action buttons.
custom_metricsNoAggregate the stats for this notification into the specified buckets (you can add up to 3 buckets for a single notification). Custom metrics are a way to aggregate the stats for all the notifications that belong to a given category. You need to explicitly create the categories from the project settings before using this feature. You can learn more in the Monitoring section of the documentation.
project_id__pathYesThe ID of a project. (Path parameter)
require_interactionNoSet to true in order to prevent browser from automatically closing the notification after a few seconds. Currently this applies only to Chrome on desktop.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoThe notification id.
uidsNoThis field is included in the response only if you specify some user IDs (uids) in the request, and it indicates which of those users are subscribed to notifications. This field is not available for scheduled notifications.
send_atNoThe time when the notification will be sent. Available only for scheduled notifications.
scheduledNoThe number of devices the notification will be delivered to. Note that this value may differ from the number of user IDs (uids) in the request, for example when some users are not subscribed or are subscribed with multiple devices. This field is not available for scheduled notifications.

TDQS

C2.6/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must fully disclose behavioral traits. It only states 'send a POST request to /projects/PROJECT_ID/notifications', which is an HTTP method and endpoint. It does not mention that the tool requires a project_id, that it is a write operation, whether it is idempotent, any authentication needs, rate limits, or side effects (e.g., duplicate notifications if called multiple times). This is a critical gap for a tool with 18 parameters.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise (one sentence), but it sacrifices completeness. It is front-loaded with the purpose, but the structural choice to include an HTTP endpoint (which is an implementation detail) and omit key context makes it less effective. Every sentence should earn its place; this one does partially but leaves major gaps.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (18 parameters, nested objects, required fields, output schema), the description is insufficient. It does not explain the overall workflow, how to use tags vs uids, or what the output indicates (e.g., created notification ID). The output schema exists but the description should still provide a high-level summary. The rich schema compensates partially, but the description is too sparse.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, documenting all 18 parameters with examples and detailed explanations. The tool description adds no additional parameter meaning beyond what the schema provides. Baseline 3 is appropriate because the schema carries the full burden of parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'send a web push notification'. The verb 'send' and resource 'web push notification' are specific. It differentiates from siblings like notifications_get (retrieve) and notifications_cancel (cancel) by focusing on creation/sending.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool ('To send a web push notification'), but provides no guidance on when not to use it, exclusions, or alternatives. With siblings like notifications_cancel, it would be helpful to mention that this tool creates a notification, not cancels one. No context is given about prerequisites or when to prefer other tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

notifications_getA

To get a notification and its stats, send a GET request to /notifications/NOTIFICATION_ID.

Only the notifications created in the last 35 days are available.

ParametersJSON Schema
NameRequiredDescriptionDefault
notification_idYesThe ID of a notification.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoA unique identifier for each notification. This is automatically generated upon notification creation.
ttlNoThe number of seconds after which the notification should be dropped if the device of the user is offline.
bodyNoThe main text of the push notification.
tagsNoThe segments that should receive this push notification (i.e. the browsers that have at least one of these tags associated will receive the notification). If both uids and tags are present, only the browsers that match both the conditions will receive the notification (i.e. a browser must be associated to a user ID listed in uids and have at least one of those tags). Instead of simple tags, you can pass boolean expressions that use the operators !, &&, || (from highest to lowest precedence) and can include parentheses. If you pass an array of tags and boolean expressions they are interpreted as ||: the example above is equivalent to "tag0 || tag1 || tagA && !tagB". When the field is omitted or null, it is ignored and the push notification is sent to everyone or to the people specified by uids. When the field is an empty array, the notification will not be sent to anyone.
uidsNoThe users that should receive this push notification. When the field is omitted or null, it is ignored and the push notification is sent to everyone or to the people specified by tags. When the field is an empty array, the notification will not be sent to anyone.
titleNoThe title of the push notification.
silentNoSet to true if you want to disable the notification sound and vibration.
urgentNoSet to true for time-sensitive alerts (e.g. incoming phone call) that must wake up devices that are sleeping.
actionsNoAdd some action buttons to the notification.
send_atNoA time when the notification will be sent.
starredNoBookmark the notification to make it easier to find it from the Pushpad dashboard. You can use this feature to highlight some notifications, for example those that have been sent manually.
icon_urlNoThe url of an image that will be used as the notification icon. Suggested size: 192x192px.
badge_urlNoThe url of a small image (that represents the app or the notification category) that will be displayed when there is not enough space to display the full notification (e.g. Android status bar). Suggested size: 96x96px.
cancelledNoThe notification has been cancelled. A notification can be cancelled on purpose or it can be cancelled by the system (for example if you exceed the usage quota).
image_urlNoThe url of an image that will be displayed in the notification content. Suggested size: 800px for the longer side.
scheduledNoThe deliveries have not started yet. You can try to cancel a notification that is in this status.
created_atNoA time value given in ISO 8601 format. It represents when the notification was created.
project_idNoThe ID of the project the notification belongs to.
target_urlNoThe url the user is redirected to when clicks the push notification.
custom_dataNoAn arbitrary string that represents some metadata that you want to attach to the notification. This string is passed as an argument to the JavaScript functions binded to the action buttons.
opened_countNoThe number of notifications that were clicked or opened.
custom_metricsNoAggregate the stats for this notification into the specified buckets (you can add up to 3 buckets for a single notification). Custom metrics are a way to aggregate the stats for all the notifications that belong to a given category. You need to explicitly create the categories from the project settings before using this feature. You can learn more in the Monitoring section of the documentation.
scheduled_countNoThe number of deliveries that are still in the sending queue.
require_interactionNoSet to true in order to prevent browser from automatically closing the notification after a few seconds. Currently this applies only to Chrome on desktop.
successfully_sent_countNoThe number of notifications that were sent successfully by Pushpad.

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description bears full responsibility for behavioral disclosure. It adds the 35-day availability constraint, which is valuable. However, it does not mention whether the operation is read-only (though implied by 'GET'), error handling, authentication needs, or what 'stats' entails. The output schema fills some gaps, but the description itself is minimal on behavior.

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 concise at two sentences, front-loading the purpose. The first sentence is slightly verbose ('To get... send a GET request') but remains clear. Every sentence adds value (purpose + constraint). No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one required parameter, output schema present), the description is mostly complete. It explains what the tool does, the API endpoint, and a key temporal constraint. It does not mention prerequisites or error scenarios, but these are less critical for a straightforward get operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers 100% of parameters with a description for notification_id. The tool description adds no additional meaning beyond the schema—it only refers to the ID in the URL pattern. According to the rubric, with high schema coverage, a baseline of 3 is appropriate.

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 clearly states the tool's purpose: 'get a notification and its stats'. It uses a specific verb ('get') and resource ('notification'), and distinguishes it from sibling tools like notifications_list (list all) and notifications_create (create). The inclusion of the HTTP endpoint further clarifies the action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for retrieving a single notification by ID, but it does not explicitly compare with alternatives (e.g., 'use this instead of notifications_list when you know the ID'). The 35-day availability constraint is a usage condition, but no guidance on when to use or avoid the tool is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

notifications_listA

To list the latest notifications for your project, send a GET request to /projects/PROJECT_ID/notifications.

Only the notifications created in the last 35 days are available.

The response body will be an array containing objects each representing a notification.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoIf you have many notifications they get paginated and you need to retrieve them with multiple requests.
project_idYesThe ID of a project.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses the GET method (implying idempotent read), the 35-day limit, and the response structure (array of objects). Side effects, error handling, and rate limits are not mentioned, but the core behavior is clear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, front-loaded with purpose, and each sentence adds distinct value (purpose+endpoint, time constraint, response format). No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (2 params, output schema exists), the description is nearly complete. It covers purpose, a key constraint, and response structure. It could be enhanced by noting the default sorting order or iterative pagination process, but the existing content is sufficient for correct use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/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 no additional meaning beyond the schema; it does not explain how to use the page parameter for pagination or the endpoint path substitution for project_id.

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 explicitly states the verb 'list', the resource 'notifications', and the scope 'for your project', with the endpoint path. It differentiates from siblings like notifications_get (single notification) and notifications_create.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions the 35-day availability window, which is a key constraint. However, it does not provide guidance on when to use this tool vs alternatives such as notifications_get for a specific notification, nor does it mention pagination iteration strategy.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

projects_createA

To create a new project, send a POST request to /projects setting the required attributes.

A project will be created using the provided information.

The response body will contain a JSON object with the attributes of your new project.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe human-readable name set for the project.
websiteYesThe URL of the project. This is also the default URL for notifications.
icon_urlNoThe default icon for notifications. Suggested size >= 192x192px, squared.
badge_urlNoA small icon displayed in the status bar for notifications. Suggested size >= 96x96px, squared.
sender_idYesThe ID of the sender associated to this project.
notifications_ttlNoDrop the notifications that cannot be delivered within this amount of time.
notifications_silentNoTurn on this option to disable the sound and vibration of notifications.
notifications_require_interactionNoTurn on this option to require user interaction and prevent browser from automatically closing the notifications after a few seconds.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoA unique identifier for each project. This is automatically generated upon project creation.
nameNoThe human-readable name set for the project.
websiteNoThe URL of the project. This is also the default URL for notifications.
icon_urlNoThe default icon for notifications. Suggested size >= 192x192px, squared.
badge_urlNoA small icon displayed in the status bar for notifications. Suggested size >= 96x96px, squared.
sender_idNoThe ID of the sender associated to this project.
created_atNoA time value given in ISO 8601 format. It represents when the project was created.
notifications_ttlNoDrop the notifications that cannot be delivered within this amount of time.
notifications_silentNoTurn on this option to disable the sound and vibration of notifications.
notifications_require_interactionNoTurn on this option to require user interaction and prevent browser from automatically closing the notifications after a few seconds.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description must disclose behavioral traits. It confirms this is a create (write) operation. It states the response will contain a JSON object with the new project's attributes, which is helpful. However, it omits what happens if the sender_id doesn't exist, whether duplicates are prevented, or rate limiting. The description adds but does not fully carry the burden given no annotations.

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 three short sentences focused on creation, endpoint, and response. It is reasonably concise and front-loaded with the key action. However, the second sentence ('A project will be created using the provided information.') is somewhat redundant with the first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 8 parameters with full schema coverage and a stated output schema presence, the description does not need to explain return values. It mentions the JSON response structure, which is appropriate. However, it lacks context on error scenarios, default values, or parameter constraints (e.g., TTL, URI formats) that could affect agent decision-making. For a creation tool with many optional parameters and a documented output schema, this is adequate but not thorough.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, meaning each of the 8 parameters has a description in the schema. The number of parameters (8) is high, but the description itself adds no parameter-level information—it merely says 'required attributes' without listing or clarifying them. The schema descriptions are present, so the description provides little added meaning beyond what the schema already offers.

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 clearly states 'To create a new project' using a POST request to a specific endpoint, which is a very specific verb+resource. It also names the required attributes. The sibling tools include both projects_delete, projects_update, etc., and this description effectively differentiates it as the creation tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions the HTTP method and endpoint, giving some implementation context. However, it does not discuss when to use this tool versus alternatives (e.g., projects_update for modifying existing projects) or any prerequisites such as requiring a sender_id. There is no guidance on error conditions or validation rules beyond noting required attributes in the schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

projects_deleteA

To delete a project, send a DELETE request to /projects/PROJECT_ID.

The project will be deleted asynchronously. The actual processing of the request is performed later.

A successful request will receive a 202 status code with no body in response.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesThe ID of a project.

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses that the deletion is asynchronous, processing happens later, and the response is a 202 status code with no body. Since no annotations are provided, the description fully carries the burden of behavioral disclosure, and it does so thoroughly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with only three sentences, no filler, and the main action is front-loaded in the first sentence. Every sentence adds necessary context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one required parameter, no output schema), the description covers the operation, async behavior, and response format. It lacks error handling details but is largely complete for a delete operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with a clear description for the single parameter (project_id). The description adds no additional meaning beyond what the schema already provides, so a baseline score of 3 is appropriate.

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 clearly states the tool's action: 'To delete a project' and specifies the HTTP DELETE request to a specific endpoint. This distinguishes it from sibling tools like projects_create, projects_get, and projects_update.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use when wanting to delete a project by its ID, but it does not provide explicit guidance on when to use this tool versus alternatives, nor does it mention prerequisites or when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

projects_getA

To show information about an individual project, send a GET request to /projects/PROJECT_ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesThe ID of a project.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoA unique identifier for each project. This is automatically generated upon project creation.
nameNoThe human-readable name set for the project.
websiteNoThe URL of the project. This is also the default URL for notifications.
icon_urlNoThe default icon for notifications. Suggested size >= 192x192px, squared.
badge_urlNoA small icon displayed in the status bar for notifications. Suggested size >= 96x96px, squared.
sender_idNoThe ID of the sender associated to this project.
created_atNoA time value given in ISO 8601 format. It represents when the project was created.
notifications_ttlNoDrop the notifications that cannot be delivered within this amount of time.
notifications_silentNoTurn on this option to disable the sound and vibration of notifications.
notifications_require_interactionNoTurn on this option to require user interaction and prevent browser from automatically closing the notifications after a few seconds.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden. It discloses the HTTP method (GET), implying a safe read operation, but does not explicitly confirm it is non-destructive, mention authentication needs, or describe error behavior. This is adequate for a simple retrieval but lacks depth.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, 14 words, no filler. Purpose and HTTP method are front-loaded. Every word serves a purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one required param, output schema exists), the description covers the core purpose and HTTP method. It does not mention return value structure (covered by output schema) or error cases, but is complete for basic usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents project_id as an integer ID. The description adds no additional meaning (only shows the endpoint placeholder). Baseline 3 is appropriate.

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 clearly states the tool shows information about an individual project, using the specific verb 'show' and resource 'project'. It distinguishes from sibling tools like projects_list (list all), projects_create, etc., by emphasizing retrieval of a single project.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

While implied by the required project_id parameter, the description does not explicitly state when to use this tool versus alternatives (e.g., 'use when you have a specific project ID; for listing use projects_list'). No exclusion criteria or context are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

projects_listA

To list all projects in your account, send a GET request to /projects.

The response body will be an array containing objects each representing a project.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations provided, so the description must carry the burden. It mentions the HTTP method and response structure, but it doesn't disclose potential behavioral traits such as pagination, rate limits, or any side effects. It is a read-only operation, but that is not explicitly stated or backed by annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise: two sentences, no extraneous fluff. It provides the essential information about the HTTP method and response format in a clear, front-loaded manner.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no parameters, a simple response, and a clear description, the tool is adequately complete for its simplicity. It could mention if there is pagination or limits, but for a basic list operation with minimal complexity, this is sufficient.

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?

The tool has 0 parameters, so the schema is minimal. The description correctly states that the response is an array of objects, adding some value about the return format. Given there are no parameters, a baseline of 4 is appropriate since there is no parameter semantics to elaborate on.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that it lists all projects in the account, with the specific HTTP endpoint. It distinguishes itself from other project operations like create, get, delete, and update, but it doesn't explicitly compare to sibling tools, which might be why it doesn't reach a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool: when you need to retrieve all projects. However, it doesn't provide explicit guidance on when not to use it or when to prefer alternatives like projects_get for a specific project. The context is clear but not fully explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

projects_updateC

To update a project, send a PATCH request to /projects/PROJECT_ID.

The project will be updated using the provided information.

The response body will contain a JSON object with the attributes of your project.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoThe human-readable name set for the project.
websiteNoThe URL of the project. This is also the default URL for notifications.
icon_urlNoThe default icon for notifications. Suggested size >= 192x192px, squared.
badge_urlNoA small icon displayed in the status bar for notifications. Suggested size >= 96x96px, squared.
project_idYesThe ID of a project.
notifications_ttlNoDrop the notifications that cannot be delivered within this amount of time.
notifications_silentNoTurn on this option to disable the sound and vibration of notifications.
notifications_require_interactionNoTurn on this option to require user interaction and prevent browser from automatically closing the notifications after a few seconds.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoA unique identifier for each project. This is automatically generated upon project creation.
nameNoThe human-readable name set for the project.
websiteNoThe URL of the project. This is also the default URL for notifications.
icon_urlNoThe default icon for notifications. Suggested size >= 192x192px, squared.
badge_urlNoA small icon displayed in the status bar for notifications. Suggested size >= 96x96px, squared.
sender_idNoThe ID of the sender associated to this project.
created_atNoA time value given in ISO 8601 format. It represents when the project was created.
notifications_ttlNoDrop the notifications that cannot be delivered within this amount of time.
notifications_silentNoTurn on this option to disable the sound and vibration of notifications.
notifications_require_interactionNoTurn on this option to require user interaction and prevent browser from automatically closing the notifications after a few seconds.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It mentions the HTTP method (PATCH) and response structure, but it does not disclose whether the operation is idempotent, what specific fields are updatable, permission requirements, or side effects (e.g., validation errors). For an update tool, this is insufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise (two sentences), but the first sentence is somewhat redundant with the schema's endpoint. It could be more front-loaded by stating the purpose immediately without the curl-like detail. No wasted words, but the structure is average.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema is present and schema coverage is full, the description doesn't need to explain return values. However, for a tool with 8 parameters, the description is minimal. It covers the basic update action but lacks behavioral context like partial updates, validation rules, or relationships to senders/notifications. It is minimally adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with each parameter having a meaningful description. The description adds nothing beyond the schema—it merely repeats that the response contains project attributes. Baseline 3 is appropriate as the schema already documents all parameters thoroughly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool is for updating a project by sending a PATCH request to a specific endpoint. It mentions the response body will contain the project attributes, which aligns with the update action. However, it does not differentiate from siblings like `projects_create` or `projects_delete`, but the verb 'update' and the PATCH method provide sufficient clarity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites (e.g., project must exist), nor does it clarify that updates are partial (PATCH vs PUT). The sibling tools include other project operations, but the description offers no comparative context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

senders_createC

To create a new sender, send a POST request to /senders setting the required attributes.

A sender will be created using the provided information.

The response body will contain a JSON object with the attributes of your new sender.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe human-readable name set for the sender.
vapid_public_keyNoThe VAPID public key associated to the subscriptions. This is automatically generated upon sender creation. You can optionally provide it if you want to import your existing key.
vapid_private_keyNoThe VAPID private key used to sign notifications. This is automatically generated upon sender creation. You can optionally provide it if you want to import your existing key.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoA unique identifier for each sender. This is automatically generated upon sender creation.
nameNoThe human-readable name set for the sender.
created_atNoA time value given in ISO 8601 format. It represents when the sender was created.
vapid_public_keyNoThe VAPID public key associated to the subscriptions. This is automatically generated upon sender creation. You can optionally provide it if you want to import your existing key.
vapid_private_keyNoThe VAPID private key used to sign notifications. This is automatically generated upon sender creation. You can optionally provide it if you want to import your existing key.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It only states that a POST request is made and a sender is created with provided information. It does not disclose any behavioral traits such as side effects, authentication requirements, rate limits, or what happens if the name already exists. The description is too thin to inform the agent about consequences.

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 short with three sentences, each adding some information. It front-loads the action ('create a new sender') and includes the HTTP method and endpoint, which is slightly redundant for MCP but not harmful. It could be more concise by omitting the HTTP details, but it is not wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (3 parameters, 1 required, output schema exists), the description is minimally adequate. It mentions that the response contains a JSON object with sender attributes, which aligns with the presence of an output schema. However, it lacks details on idempotency, error conditions, or generated fields (like auto-generated keys). The description leaves moderate gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all parameters including examples and descriptions. The description adds no additional meaning beyond referencing 'required attributes'. It does not explain how to use the optional VAPID keys or what the 'name' field represents. Baseline 3 is appropriate as the schema covers the parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool creates a new sender, using the verb-resource pair 'create a new sender'. It also mentions the HTTP method and endpoint, which adds specificity. However, it does not distinguish this tool from sibling tools like senders_update or senders_delete, although the name alone differentiates it for creation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites, when to use senders_create vs senders_update, or any context that would help an agent decide to invoke this tool. Only the basic action of creating is stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

senders_deleteA

To delete a sender, send a DELETE request to /senders/SENDER_ID.

The sender will be permanently deleted.

You cannot delete a sender if it has associated projects.

A successful request will receive a 204 status code with no body in response.

ParametersJSON Schema
NameRequiredDescriptionDefault
sender_idYesThe ID of a sender.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It transparently states that deletion is permanent ('permanently deleted'), outlines a key blocking condition (associated projects), and specifies the HTTP response (204 with no body). This is sufficient for an agent to understand the consequences and side effects, though it could mention error codes or idempotency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact (4 sentences) and front-loaded with the core action. Each sentence adds distinct information: the endpoint, the permanence, the constraint, and the response. There is no redundancy or unnecessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple delete operation with one parameter and no output schema, the description covers the essential aspects: what it does, how to invoke it (via endpoint), a critical precondition, and the expected response. It is complete enough for an agent to use correctly, though it omits details like authentication or error handling, which are likely system-level rather than tool-specific.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description does not add any additional meaning or context for the parameter 'sender_id'; it only restates the endpoint path. The schema already provides 'The ID of a sender.' The description does not explain how to obtain the ID or any format requirements, so it adds no value beyond the schema.

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 explicitly states the tool's purpose: 'To delete a sender'. It names the specific resource and action, and includes the HTTP method and endpoint. This clearly distinguishes it from sibling tools like senders_create, senders_get, or senders_update.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by stating the action, but it does not explicitly say when to use this tool versus alternatives (e.g., senders_update). It does provide a useful constraint ('cannot delete if associated projects'), which serves as a precondition. However, it lacks guidance on when not to use the tool or when to prefer other tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

senders_getC

To show information about an individual sender, send a GET request to /senders/SENDER_ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
sender_idYesThe ID of a sender.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoA unique identifier for each sender. This is automatically generated upon sender creation.
nameNoThe human-readable name set for the sender.
created_atNoA time value given in ISO 8601 format. It represents when the sender was created.
vapid_public_keyNoThe VAPID public key associated to the subscriptions. This is automatically generated upon sender creation. You can optionally provide it if you want to import your existing key.
vapid_private_keyNoThe VAPID private key used to sign notifications. This is automatically generated upon sender creation. You can optionally provide it if you want to import your existing key.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the burden of behavioral disclosure. It only states the HTTP method and endpoint, without explaining idempotency, error handling, or what happens if the sender_id is invalid. This is insufficient for a mutationless tool.

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 sentence that efficiently conveys the action. It is front-loaded and avoids unnecessary words, but it lacks structure and additional helpful context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema, the description is minimally adequate for a simple retrieval tool. However, it does not provide context about the data structure or error scenarios, so it feels incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already describes the sender_id parameter fully (100% coverage). The description adds no additional meaning beyond referencing the ID in the URL path, so it does not improve parameter understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'show information about an individual sender' and specifies the HTTP GET method and endpoint, making the purpose clear. However, it does not explicitly differentiate from senders_list, which lists all senders.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No usage guidelines are provided. The description does not indicate when to use this tool over alternatives like senders_list, nor does it mention any prerequisites or context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

senders_listB

To list all senders in your account, send a GET request to /senders.

The response body will be an array containing objects each representing a sender.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the method (GET) and endpoint, but does not mention any behavioral traits like rate limits, response size limits, or side effects. The response format is implied but not detailed, which is partially mitigated by the existence of an output schema.

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 concise, consisting of two sentences that directly state the action and response format. However, it is slightly verbose for an API with no parameters, as the HTTP method and endpoint could be considered redundant if the tool is only used via MCP. Still, it is efficient and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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 an output schema exists, the description is mostly complete. It explains what the tool does and the response structure. However, it lacks details on sorting, filtering, pagination, or authentication requirements, which would be useful for a list operation. The completeness is adequate but not rich.

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?

The input schema has no parameters (0% coverage needed), so the description does not need to add meaning beyond the schema. The description mentions the HTTP method and endpoint, which adds contextual value but is not strictly about parameters. With no parameters, a baseline of 4 is appropriate as the description provides useful context for invocation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'list' and resource 'senders', and it distinguishes itself from sibling tools like 'senders_create', 'senders_get', etc. by focusing on listing all senders. However, it does not explicitly differentiate from other list tools like 'notifications_list' beyond the resource name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives, such as 'senders_get' for a specific sender or 'senders_list' for filtering. There is no mention of usage context or exclusions, leaving the agent to infer based on the resource name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

senders_updateC

To update a sender, send a PATCH request to /senders/SENDER_ID.

The sender will be updated using the provided information.

The response body will contain a JSON object with the attributes of your sender.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoThe human-readable name set for the sender.
sender_idYesThe ID of a sender.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoA unique identifier for each sender. This is automatically generated upon sender creation.
nameNoThe human-readable name set for the sender.
created_atNoA time value given in ISO 8601 format. It represents when the sender was created.
vapid_public_keyNoThe VAPID public key associated to the subscriptions. This is automatically generated upon sender creation. You can optionally provide it if you want to import your existing key.
vapid_private_keyNoThe VAPID private key used to sign notifications. This is automatically generated upon sender creation. You can optionally provide it if you want to import your existing key.

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. It indicates the tool modifies state (update), but does not disclose behaviors like whether the operation is idempotent, what permissions are required, or if partial updates are supported. The description only mentions the HTTP method and a vague update process.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short (3 sentences) but includes unnecessary phrasing like 'The response body will contain a JSON object with the attributes of your sender.' which adds little value for an agent that already has the output schema. It could be more concise by focusing on key usage details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists and there are only 2 parameters (1 required), the description is relatively complete. It explains the HTTP method, endpoint pattern, and response format. However, it lacks detail on potential errors or side effects, but this is acceptable for a simple update operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so parameters are fully documented in the schema. The description adds no additional meaning beyond the schema, such as clarifying the sender_id is a required path parameter or that name is optional for updates. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool updates a sender via PATCH request. However, it does not differentiate from sibling tools like senders_create or senders_delete, relying on the tool name for distinction. The purpose is adequate but not distinctive.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool vs alternatives (e.g., when to update vs create a sender). It lacks context for prerequisites, such as needing an existing sender ID, and does not mention when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

subscriptions_createA

To create a new subscription, send a POST request to /projects/PROJECT_ID/subscriptions setting the required attributes.

A subscription will be created using the provided information.

The response body will contain a JSON object with the attributes of your new subscription.

This operation is mainly intended to import subscriptions from another service into Pushpad.

This is not the standard way to collect subscriptions: usually you collect them using the JavaScript SDK.

ParametersJSON Schema
NameRequiredDescriptionDefault
uidNoA user identifier associated with the subscription. You can use it to find the push subscription of a user and then send notifications to that specific user. You can choose any ID that makes sense for your application, like the ID of the user in your database.
authNoThe auth property of the push subscription object, as described in the W3C Push API. It is an authentication secret that an application server uses in authentication of its messages.
tagsNoTags associated with the subscription. You can use them to filter the push subscriptions and send notifications to a segment of your audience. You can add all tags that make sense for your application.
p256dhNoThe p256dh property of the push subscription object, as described in the W3C Push API. It is an elliptic curve Diffie-Hellman (ECDH) public key associated with the push subscription.
endpointYesThe push endpoint of a browser, as described in the W3C Push API. It is a URL where the application can deliver the push notifications that should be sent to the browser. An endpoint uniquely identifies the subscription.
project_id__pathYesThe ID of a project. (Path parameter)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoA unique identifier for each subscription. This is automatically generated upon subscription creation.
uidNoA user identifier associated with the subscription. You can use it to find the push subscription of a user and then send notifications to that specific user. You can choose any ID that makes sense for your application, like the ID of the user in your database.
authNoThe auth property of the push subscription object, as described in the W3C Push API. It is an authentication secret that an application server uses in authentication of its messages.
tagsNoTags associated with the subscription. You can use them to filter the push subscriptions and send notifications to a segment of your audience. You can add all tags that make sense for your application.
p256dhNoThe p256dh property of the push subscription object, as described in the W3C Push API. It is an elliptic curve Diffie-Hellman (ECDH) public key associated with the push subscription.
endpointNoThe push endpoint of a browser, as described in the W3C Push API. It is a URL where the application can deliver the push notifications that should be sent to the browser. An endpoint uniquely identifies the subscription.
created_atNoA time value given in ISO 8601 format. It represents when the subscription was created.
project_idNoThe ID of the project the subscription belongs to.
last_click_atNoA time value given in ISO 8601 format. It represents the last time that a notification sent to this subscription was clicked by the user. If there aren't any clicks on notifications yet, null is returned.

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. It mentions the HTTP method, creation action, and response format, but does not cover authorization requirements, error handling, idempotency, or potential side effects. The description is adequate but lacks depth.

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 front-loaded with the primary purpose and endpoint, followed by usage context. It is fairly concise with 5 sentences, though the middle sentences ('A subscription will be created...') are somewhat redundant. Overall, it is well-structured and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema and full parameter descriptions, the description provides adequate context about the tool's purpose and non-standard usage. It could be improved by mentioning the required path parameter and reinforcing endpoint validity, but it is sufficiently complete for the schema richness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description does not add meaningful information about parameters beyond what the schema already provides. It mentions 'setting the required attributes' but does not elaborate on specific parameters or their roles.

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 clearly states the tool creates a new subscription via a POST request to a specific endpoint. It distinguishes this tool from the standard JavaScript SDK collection method, making the purpose unambiguous.

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?

The description explicitly states this tool is intended for importing subscriptions from another service, and that it is not the standard way to collect subscriptions. This provides clear when-to-use and when-not-to-use guidance, noting the alternative of the JavaScript SDK.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

subscriptions_deleteA

To delete a subscription, send a DELETE request to /projects/PROJECT_ID/subscriptions/SUBSCRIPTION_ID.

The subscription will be permanently deleted.

A successful request will receive a 204 status code with no body in response.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesThe ID of a project.
subscription_idYesThe ID of a subscription.

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It does clearly state that the subscription will be 'permanently deleted' and mentions the success response (204 with no body), which adds some transparency. However, it does not disclose potential side effects (such as cascading effects) or permissions/authentication requirements. It also doesn't describe error cases or constraints (e.g., cannot delete non-existing subscription).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured: it gives the HTTP method and resource path, states the permanence, and mentions the success response. Each sentence serves a purpose with no redundancy. It is front-loaded with the core action, and there is no unnecessary verbosity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that the tool has only two parameters fully described in the schema and no output schema, the description covers the essential aspects: the action, the resource, and the success response. However, it lacks guidance on error handling, preconditions, and potential side effects, which would be helpful for a destructive operation. Since there are no annotations, the description should provide more context about when to use this tool and what to expect on failure, which is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides descriptions for both parameters (project_id and subscription_id), and the schema description coverage is 100%. The description's mention of the endpoint path (`/projects/PROJECT_ID/subscriptions/SUBSCRIPTION_ID`) indirectly clarifies the role of the parameters, but it does not add additional detail beyond the schema. Therefore, a baseline of 3 is appropriate.

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 clearly states the tool's purpose: to delete a subscription. It specifies the resource (subscription) and the action (delete). The statement 'The subscription will be permanently deleted' reinforces the destructive action, which distinguishes it from update or get operations among siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implicitly conveys that this tool is for deleting a subscription, but it does not explicitly state when to use this tool versus alternatives. It does not mention that deletion is irreversible or any prerequisites. However, the tool's purpose is clear enough that an agent would likely use it when needing to remove a subscription.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

subscriptions_getA

To show information about an individual subscription, send a GET request to /projects/PROJECT_ID/subscriptions/SUBSCRIPTION_ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYesThe ID of a project.
subscription_idYesThe ID of a subscription.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoA unique identifier for each subscription. This is automatically generated upon subscription creation.
uidNoA user identifier associated with the subscription. You can use it to find the push subscription of a user and then send notifications to that specific user. You can choose any ID that makes sense for your application, like the ID of the user in your database.
authNoThe auth property of the push subscription object, as described in the W3C Push API. It is an authentication secret that an application server uses in authentication of its messages.
tagsNoTags associated with the subscription. You can use them to filter the push subscriptions and send notifications to a segment of your audience. You can add all tags that make sense for your application.
p256dhNoThe p256dh property of the push subscription object, as described in the W3C Push API. It is an elliptic curve Diffie-Hellman (ECDH) public key associated with the push subscription.
endpointNoThe push endpoint of a browser, as described in the W3C Push API. It is a URL where the application can deliver the push notifications that should be sent to the browser. An endpoint uniquely identifies the subscription.
created_atNoA time value given in ISO 8601 format. It represents when the subscription was created.
project_idNoThe ID of the project the subscription belongs to.
last_click_atNoA time value given in ISO 8601 format. It represents the last time that a notification sent to this subscription was clicked by the user. If there aren't any clicks on notifications yet, null is returned.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses that the tool performs a GET request, implying a read-only, idempotent operation. However, it does not cover other behavioral aspects like authentication requirements, error handling, or response format (though an output schema exists). This is basic but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that front-loads the purpose ('show information') and includes the HTTP method and URL pattern. No unnecessary words; every part serves a clear function.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read tool with only two parameters and an existing output schema, the description is largely complete. It explains the resource and the retrieval method. It could mention that the subscription must exist or that it returns details, but the output schema covers the return structure. Minor gaps in usage context (e.g., no error scenarios) are acceptable given the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with both parameters described ('The ID of a project' / 'The ID of a subscription'). The description adds the URL path template showing how parameters are used, but this is more structural than semantic. It does not provide examples, constraints, or relationships beyond the schema.

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 clearly states the tool's purpose: 'show information about an individual subscription'. It also provides the HTTP method and URL format, making it specific. This distinguishes it from sibling tools like subscriptions_list (for listing multiple) and subscriptions_delete (for removal).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for retrieving a single subscription via a GET request. It does not explicitly state when not to use it or name alternatives, but the context of sibling tools (e.g., subscriptions_list) and the focus on 'individual' provides adequate guidance for most agents.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

subscriptions_listA

To list all subscriptions in your project, send a GET request to /projects/PROJECT_ID/subscriptions.

The response body will be an array containing objects each representing a subscription.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoIf you have many subscriptions they get paginated and you need to retrieve them with multiple requests.
tags[]NoFilter subscriptions by tags. Subscriptions that have at least one of these tags associated are returned. Instead of simple tags, you can also use boolean expressions for tags, for example: `(tag1 && tag2) || !tag3`.
uids[]NoFilter subscriptions by user ID. Subscriptions that have one of these uids associated are returned.
per_pageNoThe number of subscriptions per page.
project_idYesThe ID of a project.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses the HTTP method (GET) and response structure (array of objects), which is helpful. However, it does not mention pagination behavior, rate limits, or side effects, leaving some transparency gaps.

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 concise, with two clear sentences. However, the inclusion of the full endpoint path is somewhat redundant, as the tool name and schema imply the context. Minor waste but well-structured overall.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that output schema exists, the need to explain return values is lessened. The description covers the basic purpose and response type, but it does not address filtering logic or pagination details beyond what the schema provides. It is adequate but not thorough.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so parameters are well-documented in the schema. The description does not add meaning beyond what the schema already provides for the parameters (e.g., page, tags[], uids[], per_page, project_id). It only clarifies the endpoint URL pattern.

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 clearly states the tool lists all subscriptions in a project via a GET request. It distinguishes this from sibling tools like subscriptions_create, subscriptions_get, subscriptions_delete, and subscriptions_update, making its purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when needing to list subscriptions, but it does not explicitly state when to use this over other listing tools like notifications_list. No guidance on prerequisites or exclusions is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

subscriptions_updateB

To update a subscription, send a PATCH request to /projects/PROJECT_ID/subscriptions/SUBSCRIPTION_ID.

The subscription will be updated using the provided information.

The response body will contain a JSON object with the attributes of your subscription.

ParametersJSON Schema
NameRequiredDescriptionDefault
uidNoA user identifier associated with the subscription. You can use it to find the push subscription of a user and then send notifications to that specific user. You can choose any ID that makes sense for your application, like the ID of the user in your database.
tagsNoTags associated with the subscription. You can use them to filter the push subscriptions and send notifications to a segment of your audience. You can add all tags that make sense for your application.
subscription_idYesThe ID of a subscription.
project_id__pathYesThe ID of a project. (Path parameter)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoA unique identifier for each subscription. This is automatically generated upon subscription creation.
uidNoA user identifier associated with the subscription. You can use it to find the push subscription of a user and then send notifications to that specific user. You can choose any ID that makes sense for your application, like the ID of the user in your database.
authNoThe auth property of the push subscription object, as described in the W3C Push API. It is an authentication secret that an application server uses in authentication of its messages.
tagsNoTags associated with the subscription. You can use them to filter the push subscriptions and send notifications to a segment of your audience. You can add all tags that make sense for your application.
p256dhNoThe p256dh property of the push subscription object, as described in the W3C Push API. It is an elliptic curve Diffie-Hellman (ECDH) public key associated with the push subscription.
endpointNoThe push endpoint of a browser, as described in the W3C Push API. It is a URL where the application can deliver the push notifications that should be sent to the browser. An endpoint uniquely identifies the subscription.
created_atNoA time value given in ISO 8601 format. It represents when the subscription was created.
project_idNoThe ID of the project the subscription belongs to.
last_click_atNoA time value given in ISO 8601 format. It represents the last time that a notification sent to this subscription was clicked by the user. If there aren't any clicks on notifications yet, null is returned.

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavior. It correctly indicates this is a mutation operation ('update') and describes the response format ('JSON object with attributes'). However, it doesn't state whether updates are partial or full replacements, or what happens if required fields are omitted.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is brief (3 sentences) but could be more concise. The first sentence redundantly explains the HTTP method in the description when the schema already implies it. The second sentence is unnecessary. The third sentence is acceptable but could be merged.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and no output schema, the description covers the basic purpose and response shape. However, for a relatively simple update tool with no nested objects, it's missing key details: whether this is a partial update, required fields, idempotency, and error conditions. The schema's completeness partially compensates but behavioral gaps remain.

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?

The input schema has 100% coverage, with detailed descriptions for each parameter including examples and explanations for uid, tags, endpoint, etc. The description adds no additional parameter info, but given perfect schema coverage, the baseline is 3. The description earns a 4 because the schema itself is exceptionally rich and clear for all parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool is for updating a subscription via a PATCH request, which is a specific verb-resource combination. However, it doesn't differentiate from the specific sibling tool 'subscriptions_delete' or 'subscriptions_create' but it's distinct from 'notifications_*' and 'projects_*' tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'subscriptions_create' or 'subscriptions_delete'. It mentions neither prerequisites (e.g., subscription must exist) nor exclusions (e.g., fields that cannot be updated after creation).

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. 19 tool updatesv0.1.0
    • First observednotifications_cancel
    • First observednotifications_create
    • First observednotifications_get
    • First observednotifications_list
    • First observedprojects_create
    • First observedprojects_delete
    • First observedprojects_get
    • First observedprojects_list
    • First observedprojects_update
    • First observedsenders_create
    • First observedsenders_delete
    • First observedsenders_get
    • First observedsenders_list
    • First observedsenders_update
    • First observedsubscriptions_create
    • First observedsubscriptions_delete
    • First observedsubscriptions_get
    • First observedsubscriptions_list
    • First observedsubscriptions_update

TDQS

A3.7/5.0
Disambiguation5/5

Each tool targets a distinct resource-action pair (notifications, subscriptions, projects, senders) with clear CRUD operations. There is no overlap or ambiguity between the tools.

Naming Consistency5/5

All tool names follow a consistent plural_noun_verb pattern (e.g., notifications_get, subscriptions_create, projects_delete), making the API surface predictable and easily navigable.

Tool Count5/5

With 19 tools covering four distinct resources (notifications, subscriptions, projects, senders), the count is appropriate for a comprehensive push notification service. Each tool has a clear purpose, and the set is neither bloated nor thin.

Completeness5/5

All four resources have full CRUD operations (create, get, update, delete, list) with the exception of notifications which also includes cancel. No obvious gaps exist for managing a push notification service.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

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/pushpad/pushpad-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server