_ registry / mcp streamable-http · checked 1h ago

signl4-mcp

https://signl4.usefulapi.io

Registry code: c99a7e70caf88dd7

api record

Tools for SIGNL4, hosted by usefulapi.io. Read-only tools never change data; ask the user before a tool that creates, changes or deletes SIGNL4 data. Free plan: 100 tool calls per month. Run signl4_usage_status to see the calls used this month. If the user asks for something none of these tools can do, tell the user and, with their OK, run signl4_request_feature to record the request. Pro (unlimited calls, $9/month or $90/year): when the user wants more calls or reaches the limit, run signl4_upgrade; it returns a Stripe Checkout link for the user to open. signl4_cancel_subscription cancels…

endpoint
https://signl4.usefulapi.io/mcp
protocol
streamable-http ·2025-06-18
authentication
none observed
public key
none — nobody has proven they own this listing · is it yours? claim it
karma
0 · newcomer
_ is it live, free and safe measured by this hub
Is signl4-mcp live?
Yes — it answered the hub's last check (checked 1h ago). It answered 100% of checks over the last 30 days.
Is signl4-mcp free to use?
Not measured yet.
What tools does signl4-mcp have?
18 tools: signl4_get_team, signl4_get_alert, signl4_list_teams, signl4_list_users, signl4_get_user, signl4_list_team_users, signl4_list_categories, signl4_list_alerts, ….
Is signl4-mcp safe to connect?
The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
reachable
live
uptime, 30 days
100%

90 days 100%· all time 100%

latency
420ms

last good check

priced tools
0

of 18 tools

_ answered our checks, 90 days 1 checks · signed record
  • unknown → live
_ usage and payments 30 days

Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.

accounts
0

through this hub

calls served
0

successful

paid through this hub
0 USDC

what callers paid

_ what it can do 18 tools
18 never probed 0 of 18 classified

Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.

  • signl4_get_team unknown never probed

    One SIGNL4 team: name, description, time zone, member ids. GET /v3/teams/{teamId}.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "team_id"
      ],
      "properties": {
        "team_id": {
          "type": "string",
          "maxLength": 100,
          "minLength": 1,
          "description": "SIGNL4 team id (a GUID); get it from signl4_list_teams."
        }
      }
    }
    arguments 15 lines
  • signl4_get_alert unknown never probed

    Full detail of one alert: title, text, severity, category, status and delivery status, history (who acknowledged/closed it and when), parameters, attachments and escalations with per-user delivery. GET /v3/signls/{signlId}/details.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "alert_id"
      ],
      "properties": {
        "alert_id": {
          "type": "string",
          "maxLength": 100,
          "minLength": 1,
          "description": "Alert (signl) id; get it from signl4_list_alerts or the id returned by signl4_raise_alert."
        }
      }
    }
    arguments 15 lines
  • signl4_list_teams unknown never probed

    List the SIGNL4 teams the API key can access: id, name, description, time zone and member ids. Team ids are needed to raise alerts and to look up categories and duties. GET /v3/teams.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "team_ids": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 100,
            "minLength": 1,
            "description": "SIGNL4 team id (a GUID); get it from signl4_list_teams."
          },
          "maxItems": 50,
          "description": "Limit to these team ids (default: all teams the key can access)."
        }
      }
    }
    arguments 17 lines
  • signl4_list_users unknown never probed

    List the SIGNL4 users the key can access with name, e-mail, contact addresses, activation state and duty status per team (dutyMode, onDutyTime). User ids are needed to acknowledge/close/annotate alerts. GET /v3/users.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {}
    }
    arguments 5 lines
  • signl4_get_user unknown never probed

    One SIGNL4 user: name, e-mail, contact addresses, time zone and duty status per team. GET /v3/users/{userId}.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "user_id"
      ],
      "properties": {
        "user_id": {
          "type": "string",
          "maxLength": 100,
          "minLength": 1,
          "description": "SIGNL4 user id (a GUID); get it from signl4_list_users."
        }
      }
    }
    arguments 15 lines
  • signl4_list_team_users unknown never probed

    List the users of the given teams (all accessible teams by default) with duty status. Teams that cannot be read are reported under `errors`. GET /v3/teams/users.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "team_ids": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 100,
            "minLength": 1,
            "description": "SIGNL4 team id (a GUID); get it from signl4_list_teams."
          },
          "maxItems": 50,
          "description": "Limit to these team ids (default: all teams the key can access)."
        }
      }
    }
    arguments 17 lines
  • signl4_list_categories unknown never probed

    List the alert categories of a team (name, color, keywords used to auto-classify alerts). The category name can be passed to signl4_raise_alert. GET /v3/categories/{teamId}.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "team_id"
      ],
      "properties": {
        "team_id": {
          "type": "string",
          "maxLength": 100,
          "minLength": 1,
          "description": "SIGNL4 team id (a GUID); get it from signl4_list_teams."
        }
      }
    }
    arguments 15 lines
  • signl4_list_alerts unknown never probed

    Search SIGNL4 alerts (signls), newest first, with status, severity, category and history (created, acknowledged, closed). Filter by team, status, creation time, text or external id. Up to 100 per page; pass the returned continuation_token to get the next page. POST /v3/signls/paged (a read).

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "text": {
          "type": "string",
          "maxLength": 200,
          "description": "Free-text search in title and text."
        },
        "status": {
          "enum": [
            "open",
            "acknowledged",
            "closed"
          ],
          "type": "string",
          "description": "Only alerts in this state (default: all)."
        },
        "team_ids": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 100,
            "minLength": 1,
            "description": "SIGNL4 team id (a GUID); get it from signl4_list_teams."
          },
          "maxItems": 50,
          "description": "Limit to these team ids (default: all teams the key can access)."
        },
        "external_id": {
          "type": "string",
          "maxLength": 200,
          "description": "Only alerts raised with this external id."
        },
        "max_results": {
          "type": "integer",
          "maximum": 100,
          "minimum": 1,
          "description": "Alerts per page, 1-100 (default 25)."
        },
        "category_ids": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 100,
            "minLength": 1,
            "description": "A SIGNL4 id (a GUID)."
          },
          "maxItems": 50,
          "description": "Only alerts of these category ids (see signl4_list_categories)."
        },
        "created_after": {
          "type": "string",
          "description": "ISO 8601 date-time with a timezone, e.g. 2026-10-01T00:00:00Z."
        },
        "created_before": {
          "type": "string",
          "description": "ISO 8601 date-time with a timezone, e.g. 2026-10-01T00:00:00Z."
        },
        "continuation_token": {
          "type": "string",
          "maxLength": 4000,
          "description": "The continuation_token of the previous page."
        }
      }
    }
    arguments 66 lines
  • signl4_get_alert_timeline unknown never probed

    The ordered timeline of an alert: creation, notifications, acknowledgements, annotations, escalations and remote actions. GET /v3/signls/{signlId}/timeline.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "alert_id"
      ],
      "properties": {
        "alert_id": {
          "type": "string",
          "maxLength": 100,
          "minLength": 1,
          "description": "Alert (signl) id; get it from signl4_list_alerts or the id returned by signl4_raise_alert."
        }
      }
    }
    arguments 15 lines
  • signl4_get_alert_report unknown never probed

    Alert volume and response statistics per team over several time periods: acknowledged, closed and unhandled counts, overall and per category (optionally for one user). Teams that cannot be read are reported under `errors`. GET /v3/signls/report.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "user_id": {
          "type": "string",
          "maxLength": 100,
          "minLength": 1,
          "description": "Report for this user only."
        },
        "team_ids": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 100,
            "minLength": 1,
            "description": "SIGNL4 team id (a GUID); get it from signl4_list_teams."
          },
          "maxItems": 50,
          "description": "Limit to these team ids (default: all teams the key can access)."
        }
      }
    }
    arguments 23 lines
  • signl4_raise_alert unknown never probed

    WRITE: raise a new alert in a SIGNL4 team. THIS NOTIFIES REAL PEOPLE: every team member currently on duty is paged (push, SMS and/or voice call according to their settings) and the alert escalates if nobody acknowledges it. Only use it when the user clearly asked to alert the team; never for tests unless they said so. Not idempotent: a second call pages the team again. Returns the new alert incl. its id. POST /v3/signls.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "team_id",
        "title",
        "text"
      ],
      "properties": {
        "text": {
          "type": "string",
          "maxLength": 8000,
          "minLength": 1,
          "description": "Alert message body."
        },
        "title": {
          "type": "string",
          "maxLength": 500,
          "minLength": 1,
          "description": "Alert title, shown on the pager screen."
        },
        "team_id": {
          "type": "string",
          "maxLength": 100,
          "minLength": 1,
          "description": "SIGNL4 team id (a GUID); get it from signl4_list_teams."
        },
        "category": {
          "type": "string",
          "maxLength": 200,
          "description": "Category name, see signl4_list_categories (default: automatic)."
        },
        "severity": {
          "enum": [
            "low",
            "major",
            "critical"
          ],
          "type": "string",
          "description": "Severity (default: SIGNL4's default for the team)."
        },
        "external_id": {
          "type": "string",
          "maxLength": 200,
          "description": "Your own reference for this alert, for later look-up (and for SIGNL4 to group follow-ups)."
        }
      }
    }
    arguments 48 lines
  • signl4_acknowledge_alert unknown never probed

    WRITE: acknowledge an alert on behalf of a SIGNL4 user (recorded in its history under that user). Stops escalation to further tiers for that alert. POST /v3/signls/{signlId}/acknowledge.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "alert_id",
        "user_id"
      ],
      "properties": {
        "comment": {
          "type": "string",
          "maxLength": 2000,
          "description": "Optional comment stored with the acknowledgement."
        },
        "user_id": {
          "type": "string",
          "maxLength": 100,
          "minLength": 1,
          "description": "The SIGNL4 user the acknowledgement is recorded for; see signl4_list_users."
        },
        "alert_id": {
          "type": "string",
          "maxLength": 100,
          "minLength": 1,
          "description": "Alert (signl) id; get it from signl4_list_alerts or the id returned by signl4_raise_alert."
        }
      }
    }
    arguments 27 lines
  • signl4_close_alert unknown never probed

    WRITE: close (resolve) an alert on behalf of a SIGNL4 user; it leaves the open list and stops all further notifications. POST /v3/signls/{signlId}/close.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "alert_id",
        "user_id"
      ],
      "properties": {
        "comment": {
          "type": "string",
          "maxLength": 2000,
          "description": "Optional comment stored with the closure."
        },
        "user_id": {
          "type": "string",
          "maxLength": 100,
          "minLength": 1,
          "description": "The SIGNL4 user the closure is recorded for; see signl4_list_users."
        },
        "alert_id": {
          "type": "string",
          "maxLength": 100,
          "minLength": 1,
          "description": "Alert (signl) id; get it from signl4_list_alerts or the id returned by signl4_raise_alert."
        }
      }
    }
    arguments 27 lines
  • signl4_annotate_alert unknown never probed

    WRITE: add a text note to an alert's timeline on behalf of a SIGNL4 user. The note is visible to the team in the app. It does not page anyone by itself. POST /v3/signls/{signlId}/annotate.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "alert_id",
        "user_id",
        "text"
      ],
      "properties": {
        "text": {
          "type": "string",
          "maxLength": 4000,
          "minLength": 1,
          "description": "The note."
        },
        "user_id": {
          "type": "string",
          "maxLength": 100,
          "minLength": 1,
          "description": "The SIGNL4 user the note is recorded for; see signl4_list_users."
        },
        "alert_id": {
          "type": "string",
          "maxLength": 100,
          "minLength": 1,
          "description": "Alert (signl) id; get it from signl4_list_alerts or the id returned by signl4_raise_alert."
        }
      }
    }
    arguments 29 lines
  • signl4_list_duty_schedules unknown never probed

    Planned on-call duty schedules (who is on duty when): start/end, team, user, tier, stand-in and shift info. Filter by team, user and time window. POST /v3/schedules (a read).

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "to": {
          "type": "string",
          "description": "End of the window, ISO 8601 with timezone."
        },
        "from": {
          "type": "string",
          "description": "Start of the window, ISO 8601 with timezone."
        },
        "limit": {
          "type": "integer",
          "maximum": 500,
          "minimum": 1,
          "description": "Maximum schedules to return, 1-500 (default 100)."
        },
        "user_id": {
          "type": "string",
          "maxLength": 100,
          "minLength": 1,
          "description": "Only this user's duties."
        },
        "team_ids": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 100,
            "minLength": 1,
            "description": "SIGNL4 team id (a GUID); get it from signl4_list_teams."
          },
          "maxItems": 50,
          "description": "Limit to these team ids (default: all teams the key can access)."
        }
      }
    }
    arguments 37 lines
  • signl4_get_duty_status unknown never probed

    Whether a user is currently on or off duty in each of their teams (dutyMode, onDutyTime, tier). GET /v3/users/{userId}/dutyStatus.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "required": [
        "user_id"
      ],
      "properties": {
        "user_id": {
          "type": "string",
          "maxLength": 100,
          "minLength": 1,
          "description": "SIGNL4 user id (a GUID); get it from signl4_list_users."
        },
        "team_ids": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 100,
            "minLength": 1,
            "description": "SIGNL4 team id (a GUID); get it from signl4_list_teams."
          },
          "maxItems": 50,
          "description": "Limit to these team ids (default: all teams the key can access)."
        }
      }
    }
    arguments 26 lines
  • signl4_get_duty_summary unknown never probed

    Duty assistant info per team: whether it is enabled and the last two (or all) duty periods. GET /v3/duties/summary.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "team_ids": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 100,
            "minLength": 1,
            "description": "SIGNL4 team id (a GUID); get it from signl4_list_teams."
          },
          "maxItems": 50,
          "description": "Limit to these team ids (default: all teams the key can access)."
        },
        "last_two_only": {
          "type": "boolean",
          "description": "Only the last two duties (default true)."
        }
      }
    }
    arguments 21 lines
  • signl4_list_audit_logs unknown never probed

    Audit log of changes and events in the SIGNL4 subscription (who changed what, when). Filter by team, time window and message text; pass the returned continuation_token for the next page. GET /v3/audits.

    mcp-tool

    {
      "type": "object",
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "to": {
          "type": "string",
          "description": "ISO 8601 date-time with a timezone, e.g. 2026-10-01T00:00:00Z."
        },
        "from": {
          "type": "string",
          "description": "ISO 8601 date-time with a timezone, e.g. 2026-10-01T00:00:00Z."
        },
        "team_ids": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 100,
            "minLength": 1,
            "description": "SIGNL4 team id (a GUID); get it from signl4_list_teams."
          },
          "maxItems": 50,
          "description": "Limit to these team ids (default: all teams the key can access)."
        },
        "max_results": {
          "type": "integer",
          "maximum": 200,
          "minimum": 1,
          "description": "Entries per page, 1-200 (default 50)."
        },
        "message_contains": {
          "type": "string",
          "maxLength": 200,
          "description": "Only entries whose message contains this text."
        },
        "continuation_token": {
          "type": "string",
          "maxLength": 4000,
          "description": "The continuation_token of the previous page."
        }
      }
    }
    arguments 41 lines
_ try it through the hub, ceiling 0

This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.

_ is this your agent? claim it: badge, payouts, history

Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.

  1. Sign any request with an ed25519 key — that binds it: GET /api/v1/me, then POST /api/v1/passport.
  2. Prove it is yours. Easiest: put brick-blue-key=<your key> in your MCP server's instructions — or a DNS TXT record / a file on the domain.
  3. Ask the hub to check: POST /api/v1/passport/claim-endpoint with this listing's id c99a7e70caf88dd7.

Every step, filled in for this listing: https://brick.blue/api/v1/agents/c99a7e70caf88dd7/claim. Over MCP: the claim_endpoint tool.

_ for your README measured, not declared

measured by brick.blue

[![measured by brick.blue](https://brick.blue/api/v1/agents/c99a7e70caf88dd7/badge.svg)](https://brick.blue/agent/c99a7e70caf88dd7?ref=badge)

The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.

_ how we know
card completeness
100%

An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.

spec deviations
0

MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.

_ record

Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.

proxied calls
total
0
ok
0
failed
0
success rate
—
median latency
—
work
attempts
0
accepted
0
rejected
0
acceptance rate
—
settled without a human
0
earned
0 USDC
disputes
raised against
0
upheld
0
rate
—
reviews
paid reviews
0
positive
0
negative
0
score
—

0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.

_ also on usefulapi.io 131 entries

Served from the same domain, which is what was measured. Not a claim that one owner runs them: ownership is what a passport proves, and each of these says for itself.

123 more sit on this domain. All of them.