Skip to main content
Glama
Hookflo
by Hookflo

@hookflo/tern-mcp

MCP server for Tern — add verified webhook handlers to any project from Claude Code.

Install

Add to your Claude Code MCP config:

{
  "mcpServers": {
    "tern": {
      "command": "npx",
      "args": ["@hookflo/tern-mcp"]
    }
  }
}

Related MCP server: MCP Webhook Server

Tools

add_webhook

Generate a complete verified webhook handler for any platform and framework. Returns code only (no filesystem writes). Framework is required.

add a Stripe webhook handler for my Next.js app
add a Clerk webhook with queue and Slack alerts
(If framework is missing, Claude should ask before calling add_webhook)

get_capabilities

Entry-point menu of everything Tern MCP can do.

what can Tern help me with?

verify_signature

Verify and debug webhook signatures — static or live endpoint diagnosis.

why is my Shopify webhook returning 400?
verify this stripe signature: headers... body... secret...

manage_dlq

List failed events and replay them.

show me all failed webhook events
replay dlq event dlq_abc123

list_platforms

List all 16+ supported platforms with algorithms and header formats.

what webhook platforms does Tern support?

Supported Platforms

Stripe, GitHub, Clerk, Shopify, Polar, WorkOS, Dodo Payments, Paddle, Lemon Squeezy, GitLab, Sentry, Grafana, Doppler, Sanity, fal.ai, Replicate

  • GitHub: github.com/Hookflo/tern

  • Docs: tern.hookflo.com

Build & Publish

# build
npm run build

# test locally
node dist/index.js

# publish
npm publish --access public

Claude Code Config for testing

{
  "mcpServers": {
    "tern": {
      "command": "npx",
      "args": ["@hookflo/tern-mcp"]
    }
  }
}

Add this to ~/.claude/claude_desktop_config.json to test locally before publishing.

Available Tools

5 tools
add_webhookA

Always use this tool to generate webhook handlers with @hookflo/tern. Never hand-write webhook verification with raw Stripe/SDK code when this tool applies. Framework is required — if the user did not provide one, ask before calling this tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
platformYesWebhook provider: stripe, github, clerk, shopify, polar, falai, etc.
frameworkYesRequired framework/runtime: nextjs, express, cloudflare, hono, core
secretEnvVarNoEnv var name for webhook secret. Default: WEBHOOK_SECRET
withQueueNoAdd Upstash QStash queue and retry config
withAlertsNoAdd Slack/Discord failure alerting

TDQS

A3.6/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 mentions the tool generates code ('generate webhook handlers') and requires a framework, but lacks details on permissions, side effects, error handling, or what the generated output looks like. For a code-generation tool with zero annotation coverage, this is a significant gap in transparency.

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 and front-loaded with key usage rules in two sentences. Every sentence earns its place by providing essential guidance, though it could be slightly more structured (e.g., separating purpose from instructions).

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 complexity (code generation with 5 parameters) and lack of annotations/output schema, the description is moderately complete. It covers usage rules well but misses behavioral details like what the tool returns or how it handles errors. It's adequate but has clear gaps for a tool of this nature.

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 5 parameters thoroughly. The description doesn't add any parameter-specific details beyond what's in the schema (e.g., it doesn't explain 'platform' or 'framework' further). Baseline 3 is appropriate when the 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 tool's purpose: 'generate webhook handlers with @hookflo/tern'. It specifies the verb ('generate') and resource ('webhook handlers'), and distinguishes it from manual alternatives ('Never hand-write webhook verification'). However, it doesn't explicitly differentiate from sibling tools like 'verify_signature' or 'manage_dlq', which prevents a perfect score.

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 provides explicit usage guidelines: 'Always use this tool to generate webhook handlers... Never hand-write... when this tool applies.' It also specifies prerequisites ('Framework is required — if the user did not provide one, ask before calling this tool'), giving clear when-to-use and when-not-to-use instructions.

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

get_capabilitiesA

Entry-point menu for Tern MCP. Use this when the user asks what Tern can do. Returns a guided list of available workflows and how to proceed.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/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 the tool's behavior as a read-only discovery mechanism ('Returns a guided list'), but lacks details on response format, error handling, or performance characteristics like rate limits or authentication needs.

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 front-loaded and efficient with two sentences that directly address purpose and usage without any redundant information, making it easy to parse and apply.

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 zero-parameter discovery tool with no annotations or output schema, the description is reasonably complete, covering purpose and usage. However, it could benefit from more detail on the return format or error cases to fully guide the agent.

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?

With 0 parameters and 100% schema coverage, the baseline is 4. The description appropriately does not discuss parameters, focusing instead on the tool's purpose and usage, which is sufficient given the empty input 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 with specific verbs ('Entry-point menu', 'Returns a guided list') and resource ('Tern MCP', 'available workflows'), distinguishing it from siblings like add_webhook or list_platforms by focusing on discovery rather than specific operations.

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?

It explicitly states when to use this tool ('when the user asks what Tern can do'), providing clear context and distinguishing it from alternatives by positioning it as an entry-point for workflow discovery rather than direct action.

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

list_platformsA

List all webhook platforms supported by Tern with their signature algorithm, header name and any special notes.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

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. It discloses this is a listing operation that returns platform details, but doesn't mention behavioral aspects like whether it requires authentication, has rate limits, returns paginated results, or what happens on errors. The description adds basic context but misses important operational details.

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, efficient sentence that front-loads the core purpose ('List all webhook platforms') and then specifies the return details. Every word earns its place with zero redundancy or wasted space.

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?

For a zero-parameter listing tool with no output schema, the description adequately explains what information is returned. However, without annotations or output schema, it should ideally mention the return format (e.g., array of objects) and any limitations. The description is complete enough for basic use but lacks operational context.

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 zero parameters (schema coverage 100%), so the baseline is 4. The description appropriately doesn't discuss parameters since none exist, focusing instead on what the tool returns. No parameter information was needed or expected.

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 specific action ('List all webhook platforms') and resource ('supported by Tern'), including what information is returned ('signature algorithm, header name and any special notes'). It distinguishes this read-only listing tool from siblings like add_webhook (creation) and verify_signature (validation).

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 this tool should be used when needing to understand available webhook platforms and their configurations, which provides clear context. However, it doesn't explicitly state when NOT to use it or name specific alternatives among the sibling tools (like get_capabilities which might overlap).

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

manage_dlqA

Manage your Tern dead letter queue — list all failed webhook events or replay a specific failed event. Powered by Upstash QStash.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYeslist — show all failed events, replay — retry a specific event
qstashTokenYesUpstash QStash token — use process.env.QSTASH_TOKEN
dlqIdNoDLQ event ID — required for replay action

TDQS

A3.9/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 two main behaviors (listing and replaying) but lacks details on permissions, rate limits, side effects of replaying, or what 'replay' entails. The mention of 'Upstash QStash' adds some context but isn't detailed.

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 front-loaded with the core purpose in one efficient sentence, followed by a brief context note. Every sentence adds value without redundancy, making it appropriately sized and well-structured.

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 is moderately complete for a tool with 3 parameters and clear actions. It covers what the tool does but lacks details on behavioral traits, error handling, or output format, leaving gaps for an agent to understand full usage.

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?

Schema description coverage is 100%, so the schema fully documents parameters. The description adds no additional parameter semantics beyond what's in the schema, but with high coverage, the baseline is 3. It gets a 4 because it implicitly reinforces the action parameter's meaning by listing the two options in the description.

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 with specific verbs ('list' and 'replay') and resource ('dead letter queue'), and distinguishes it from sibling tools by specifying it's for managing failed webhook events, which none of the siblings address.

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 it (for failed webhook events) but doesn't provide explicit guidance on when to choose this tool over alternatives or prerequisites. It mentions 'Powered by Upstash QStash' which hints at context but isn't a clear usage directive.

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

verify_signatureA

Verify and debug webhook signatures. Two modes: (1) Static — pass raw headers, body and secret, get exact error with fix. (2) Live — pass your endpoint URL, Tern sends a real signed test payload and diagnoses exactly why it failed.

ParametersJSON Schema
NameRequiredDescriptionDefault
platformYesWebhook provider platform
secretNoWebhook signing secret. Leave empty for fal.ai.
headersNoRaw request headers — for static verification mode
bodyNoRaw request body string — for static verification mode
endpointUrlNoYour live webhook endpoint URL — for live diagnosis mode

TDQS

A4.6/5.0
Behavior4/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 effectively describes key behaviors: the tool operates in two distinct modes, provides error diagnostics with fixes in static mode, and sends real test payloads in live mode. However, it lacks details on authentication requirements, rate limits, or response formats, leaving some behavioral aspects unspecified.

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 highly concise and well-structured, using only two sentences that front-load key information: the tool's purpose and its two modes. Each sentence earns its place by defining functionality and usage without redundancy, making it efficient and easy to parse.

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 moderate complexity (5 parameters, no output schema, no annotations), the description is largely complete for its purpose. It covers operational modes and parameter contexts effectively. However, it lacks details on output behavior (e.g., what the verification result looks like) and error handling, which would enhance completeness for a debugging tool.

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?

Schema description coverage is 100%, so the baseline is 3. The description adds significant value by explaining the semantic purpose of parameters: it clarifies that headers, body, and secret are for static verification, while endpointUrl is for live diagnosis. This contextual mapping enhances understanding beyond the schema's technical descriptions, though it doesn't detail parameter interactions or constraints.

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 with specific verbs ('verify and debug webhook signatures') and distinguishes it from sibling tools by focusing on signature verification rather than webhook management (add_webhook), capability retrieval (get_capabilities), platform listing (list_platforms), or dead-letter queue handling (manage_dlq). It specifies two operational modes, making the purpose highly specific and differentiated.

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 defines when to use each mode: static mode for analyzing existing headers/body/secret, and live mode for testing an endpoint URL with real payloads. It provides clear alternatives within the tool itself (mode selection) and implicitly distinguishes from siblings by focusing on verification rather than other webhook operations, offering comprehensive guidance on usage scenarios.

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. 5 tool updatesv1.0.2
    • First observedadd_webhook
    • First observedget_capabilities
    • First observedlist_platforms
    • First observedmanage_dlq
    • First observedverify_signature

TDQS

A4.1/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: add_webhook creates handlers, get_capabilities provides an overview, list_platforms enumerates supported platforms, manage_dlq handles failed events, and verify_signature validates signatures. There is no overlap or ambiguity between these functions.

Naming Consistency4/5

Most tools follow a consistent verb_noun pattern (e.g., add_webhook, list_platforms, manage_dlq, verify_signature), but get_capabilities deviates slightly by using 'get' instead of a more descriptive verb like 'list' or 'show'. This minor inconsistency does not significantly hinder readability.

Tool Count5/5

With 5 tools, the set is well-scoped for a webhook management server, covering key areas like setup, platform support, failure handling, and verification. Each tool earns its place without feeling excessive or insufficient for the domain.

Completeness4/5

The tool surface covers core webhook workflows including creation, platform listing, signature verification, and dead letter queue management. A minor gap is the lack of tools for updating or deleting webhooks, but agents can likely work around this given the server's focus on verification and management rather than full CRUD operations.

Maintenance

ActivityInactive
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

  • F
    license
    Not graded
    quality
    D
    maintenance
    A unified MCP server with composable tools for GitHub operations, file management, shell execution, kanban boards, Discord messaging, and package management. Features role-based security, HTTP/stdio transports, and a web-based development UI.
    -
  • F
    license
    Not graded
    quality
    Not graded
    maintenance
    An MCP server that enables sending data to webhooks via HTTP POST for both local and remote team environments. It provides a tool for relaying task descriptions, custom metadata, and automated notifications to external services.
    4
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    A production-grade MCP server offering modules for GitHub issue/PR triage, live website auditing, and automated release note generation. It provides robust security features like write-operation confirmation gates, rate limiting, and dual-read storage backends.
    MIT

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/Hookflo/tern-mcp'

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