Skip to main content
Glama

@pingfyr/mcp

Connect your AI assistant to Pingfyr via MCP. Manage reminders through natural conversation.

One API call. Seven channels. Your reminders fire automatically — no external cron, no polling, no babysitting.

Available as a local npm package or as a hosted server at mcp.pingfyr.com — no local install required.

Installation

npm install -g @pingfyr/mcp

Or run directly with npx:

npx @pingfyr/mcp

Related MCP server: Telegram Reminder MCP

Configuration

Local Setup (stdio)

Run the MCP server as a local process. Requires Node.js 18+.

Add to your MCP client config (Claude Code, Cursor, Windsurf, etc.):

{
  "mcpServers": {
    "pingfyr": {
      "command": "pingfyr-mcp",
      "env": {
        "PINGFYR_API_KEY": "rm_your_api_key"
      }
    }
  }
}

Sign up at pingfyr.com to get your API key.

Hosted Setup

No install required. Connect directly to mcp.pingfyr.com using HTTP transport. Your API key is sent as a Bearer token per request.

{
  "mcpServers": {
    "pingfyr": {
      "type": "http",
      "url": "https://mcp.pingfyr.com",
      "headers": {
        "Authorization": "Bearer rm_your_api_key"
      }
    }
  }
}

HTTP transport is supported by Claude Code and Cursor. Claude Desktop requires the local (stdio) option above.

Available Tools

Tool

Description

create_reminder

Schedule a new reminder via email, webhook, Slack, Discord, Telegram, OpenClaw, or Google Calendar

list_reminders

List all reminders with optional filtering by status, limit, and offset

update_reminder

Update a pending reminder (title, body, fire_at, channel, recipients, repeat, timezone)

cancel_reminder

Cancel a pending reminder

create_reminder Parameters

Parameter

Required

Type

Description

title

Yes

string

Title of the reminder (max 200 chars)

fire_at

Yes

string

When to fire (ISO 8601 datetime, must be in the future)

channel

Yes

enum

email, webhook, slack, discord, telegram, openclaw, google_calendar

recipients

Yes

string[]

Delivery addresses (see Channels table for format per channel)

body

No

string

Body/description of the reminder (max 2000 chars)

repeat

No

enum

daily, weekly, monthly, custom

cron_expression

No

string

Cron expression (required when repeat is custom)

timezone

No

string

IANA timezone for recurring reminders (default: UTC)

metadata

No

object

Arbitrary key-value metadata to attach to the reminder

list_reminders Parameters

Parameter

Required

Type

Description

status

No

enum

pending, processing, delivered, failed, cancelled

limit

No

number

Max results (default: 50, max: 100)

offset

No

number

Pagination offset (default: 0)

update_reminder Parameters

Parameter

Required

Type

Description

id

Yes

string

UUID of the reminder to update

title

No

string

New title

body

No

string

New body

fire_at

No

string

New fire time (ISO 8601)

channel

No

enum

New channel

recipients

No

string[]

Updated delivery addresses

repeat

No

enum

New repeat schedule (null to remove)

timezone

No

string

New timezone

Examples

Email reminder (multi-recipient)

{
  "title": "Project deadline reminder",
  "fire_at": "2026-12-15T08:00:00Z",
  "channel": "email",
  "recipients": ["alice@example.com", "bob@example.com"]
}

Slack reminder

{
  "title": "Weekly team sync reminder",
  "fire_at": "2026-12-01T09:00:00Z",
  "channel": "slack",
  "recipients": ["https://hooks.slack.com/services/T.../B.../xxx"],
  "repeat": "weekly",
  "timezone": "America/New_York"
}

Discord notification

{
  "title": "Deploy notification",
  "fire_at": "2026-12-01T17:00:00Z",
  "channel": "discord",
  "recipients": ["https://discord.com/api/webhooks/xxx/yyy"]
}

Telegram reminder

{
  "title": "Daily standup",
  "fire_at": "2026-12-01T09:00:00Z",
  "channel": "telegram",
  "recipients": ["bot:your-bot-uuid:your-chat-id"],
  "repeat": "daily",
  "timezone": "Europe/Berlin"
}

Find your bot_id in Settings → Telegram Bots on the Pingfyr dashboard.

OpenClaw notification

{
  "title": "Agent task complete",
  "fire_at": "2026-12-01T10:00:00Z",
  "channel": "openclaw",
  "recipients": ["https://openclaw.example.com/webhook"]
}

Google Calendar event (Starter+ plan required)

Creates a Google Calendar event on the user's connected Google account. Connect your account at Settings → Google Calendar in the Pingfyr dashboard.

{
  "title": "Team sync",
  "fire_at": "2026-12-01T09:00:00Z",
  "channel": "google_calendar",
  "recipients": ["google"]
}

Webhook (agent wake-up)

{
  "title": "Check for new orders",
  "fire_at": "2026-12-01T10:00:00Z",
  "channel": "webhook",
  "recipients": ["https://your-agent.example.com/webhook"],
  "repeat": "daily"
}

Custom cron schedule

{
  "title": "Weekday morning check",
  "fire_at": "2026-12-01T09:00:00Z",
  "channel": "webhook",
  "recipients": ["https://your-agent.example.com/webhook"],
  "repeat": "custom",
  "cron_expression": "0 9 * * MON-FRI",
  "timezone": "America/New_York"
}

Channels

Channel

recipients format

Description

email

Email addresses

Deliver to one or more email inboxes (Starter+ plan required)

webhook

HTTP/HTTPS URL

POST request to wake up agents

slack

Slack Incoming Webhook URL

Post message to a Slack channel

discord

Discord Webhook URL

Post message to a Discord channel

telegram

bot:<bot_id>:<chat_id>

Send message via Telegram bot (register bot in Settings → Telegram Bots)

openclaw

OpenClaw URL

POST request to an OpenClaw endpoint

google_calendar

google (literal)

Create a Google Calendar event on your connected account (Starter+ plan required)

Plans

Plan

Price

Reminders/month

Recipients/month

Free

$0

50

100

Starter

$59/mo

10,000

20,000

Pro

$269/mo

50,000

100,000

Enterprise

Contact

Unlimited

Unlimited

Free plan includes Webhook, Slack, Discord, Telegram, and OpenClaw channels. Email and Google Calendar require a paid plan (Starter+).

Environment Variables

Variable

Required

Description

PINGFYR_API_KEY

Yes

Your Pingfyr API key

PINGFYR_API_URL

No

API base URL (default: https://pingfyr.com)

License

MIT

Available Tools

4 tools
cancel_reminderA

Cancel a pending reminder so it will not be delivered

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesUUID of the reminder to cancel

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries full burden. It states the core effect (prevents delivery) but omits details like reversibility, side effects, error handling (e.g., if already delivered), or permissions needed. Adequate but not comprehensive.

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, clear sentence with 9 words. Every word adds value; no redundancy. Perfectly concise for a simple action.

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 (1 param, no output schema, no annotations), the description covers the essential action and outcome. It could mention what happens on success/failure, but it's nearly complete for a straightforward cancel 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% (1 parameter described as 'UUID of the reminder to cancel'). The description adds no extra meaning beyond the schema. 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 action ('cancel') and the resource ('pending reminder'), with a specific outcome ('will not be delivered'). This effectively distinguishes it from sibling tools like create_reminder, list_reminders, and update_reminder.

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 (e.g., update_reminder). It does not mention prerequisites, conditions (e.g., reminder must be pending), or when cancellation is inappropriate.

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

create_reminderA

Schedule a new reminder to be delivered via email, webhook, Slack, Discord, Telegram, OpenClaw, or Google Calendar

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesTitle of the reminder (max 200 chars)
fire_atYesWhen to fire the reminder (ISO 8601 datetime, must be in the future)
bodyNoOptional body/description of the reminder (max 2000 chars)
channelYesDelivery channel: "email", "webhook", "slack", "discord", "telegram", "openclaw", or "google_calendar"
recipientsYesRequired. Delivery addresses: email addresses for email channel, URLs for webhook/slack/discord/openclaw, bot:<bot_id>:<chat_id> format for telegram (find bot_id in Settings → Telegram Bots).
repeatNoRecurring schedule
cron_expressionNoCron expression (required when repeat is "custom")
timezoneNoIANA timezone for recurring reminders (default: UTC)
metadataNoArbitrary metadata to attach to the reminder

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 should disclose behavioral traits. It only states what it does but not side effects (e.g., whether it's idempotent, what happens on duplicate, if it returns an ID) or requirements like authentication or rate limits.

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 concise sentence that front-loads the action and resource. It is efficient but lacks structure (e.g., bullet points or summary of parameters).

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?

With 9 parameters, 4 required, and no output schema or annotations, the description is incomplete. It does not explain what happens after scheduling (e.g., return value, confirmation), nor constraints like fire_at must be in the future (though schema mentions it). The schema descriptions cover parameters, but overall behavior is lacking.

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 detailed descriptions for each parameter. The tool description adds no additional meaning beyond the schema, so it meets the baseline but does not exceed it.

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 verb 'Schedule' and the resource 'a new reminder', and lists the delivery channels (email, webhook, Slack, etc.). This distinguishes it from sibling tools (cancel, list, update) which are different actions.

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 creating a new reminder, and sibling tools are distinct operations, so there's no ambiguity. However, no explicit guidance on when not to use or alternatives is provided.

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

list_remindersA

List all reminders for the authenticated user with optional filtering

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNoFilter by status
limitNoMax results (default 50, max 100)
offsetNoPagination offset (default 0)

TDQS

A4/5.0
Behavior3/5

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

No annotations provided. Description only states 'list', implying read-only, but does not disclose any behavioral details like potential delays, permissions, or limitations beyond what is obvious.

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 with no wasted words. Front-loaded with verb and resource. Efficiently conveys purpose and scope.

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 list tool, description covers purpose and filtering. Pagination details are in schema but could be hinted in description. Overall adequate given schema completeness.

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 baseline is 3. Description adds no extra meaning beyond the schema, simply referencing 'optional filtering' which matches the status parameter.

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?

Description clearly states verb 'List', resource 'reminders', scope 'for the authenticated user', and optional filtering, distinguishing it from sibling tools like cancel_reminder and create_reminder.

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?

Usage context is clear: list reminders for the authenticated user. No explicit when-not or alternatives mentioned, but siblings have distinct actions, so implicit differentiation is adequate.

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

update_reminderB

Update a pending reminder (title, fire time, etc.)

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesUUID of the reminder to update
titleNoNew title
bodyNoNew body
fire_atNoNew fire time (ISO 8601)
channelNoNew channel: "email", "webhook", "slack", "discord", "telegram", "openclaw", or "google_calendar"
recipientsNoUpdated delivery addresses
repeatNoNew repeat schedule (null to remove)
cron_expressionNoCron expression (required when setting repeat to "custom")
timezoneNoNew timezone

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 must carry full behavior disclosure. It indicates mutation ('update') but does not disclose constraints like whether updates are allowed after a reminder fires, error behaviors, or idempotency. Significant gaps remain.

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 concise sentence that front-loads the core action. It is efficient but could be slightly more informative without becoming 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?

For a tool with 9 parameters and no output schema or annotations, the description is minimal. It does not explain return values, error states, or constraints beyond 'pending'. Inadequate for the tool's complexity.

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% coverage with descriptions for all parameters. The description only mentions a few fields ('title, fire time, etc.'), adding little beyond the schema. Baseline 3 is appropriate as schema does the heavy lifting.

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 action (update) and the object (pending reminder), and mentions typical fields. However, it doesn't differentiate from siblings like create_reminder or cancel_reminder, though the name is self-explanatory.

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 it is used for updating pending reminders but does not provide explicit when-to-use or when-not-to-use guidance. It mentions 'pending' which gives some context, but lacks alternatives or exclusions.

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.

  1. 4 tool updatesv0.1.0
    • First observedcancel_reminder
    • First observedcreate_reminder
    • First observedlist_reminders
    • First observedupdate_reminder

TDQS

A3.8/5.0

Scored across 4 tools

Disambiguation5/5

Each tool targets a unique action on reminders: create, list, update, and cancel. Descriptions are clear and distinct, with no overlap.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case (e.g., cancel_reminder, create_reminder), making them predictable and easy to understand.

Tool Count5/5

With only 4 tools, the set is well-scoped for a reminder service covering essential operations: create, read (list), update, and delete (cancel). No extraneous tools.

Completeness4/5

The tools cover CRUD-like operations for reminders, but a dedicated 'get_reminder' for a single reminder's details is missing, though list_reminders may suffice. Otherwise, the surface feels complete for the domain.

Maintenance

ActivityInactive
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers