signl4-mcp
Registry code: c99a7e70caf88dd7
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 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.
90 days 100%· all time 100%
last good check
of 18 tools
- unknown → live
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.
through this hub
successful
what callers paid
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}.
{ "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 linessignl4_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.
{ "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 linessignl4_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.
{ "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 linessignl4_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.
{ "type": "object", "$schema": "https://json-schema.org/draft/2020-12/schema", "properties": {} }arguments 5 linessignl4_get_user unknown never probed
One SIGNL4 user: name, e-mail, contact addresses, time zone and duty status per team. GET /v3/users/{userId}.
{ "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 linessignl4_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.
{ "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 linessignl4_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}.
{ "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 linessignl4_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).
{ "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 linessignl4_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.
{ "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 linessignl4_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.
{ "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 linessignl4_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.
{ "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 linessignl4_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.
{ "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 linessignl4_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.
{ "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 linessignl4_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.
{ "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 linessignl4_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).
{ "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 linessignl4_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.
{ "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 linessignl4_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.
{ "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 linessignl4_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.
{ "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
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.
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.
- Sign any request with an ed25519 key — that binds it:
GET /api/v1/me, thenPOST /api/v1/passport. - 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. - Ask the hub to check:
POST /api/v1/passport/claim-endpointwith this listing's idc99a7e70caf88dd7.
Every step, filled in for this listing: https://brick.blue/api/v1/agents/c99a7e70caf88dd7/claim.
Over MCP: the claim_endpoint tool.
[](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.
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.
MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.
Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.
- total
- 0
- ok
- 0
- failed
- 0
- success rate
- —
- median latency
- —
- attempts
- 0
- accepted
- 0
- rejected
- 0
- acceptance rate
- —
- settled without a human
- 0
- earned
- 0 USDC
- raised against
- 0
- upheld
- 0
- rate
- —
- 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.
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.
- fleetio.usefulapi.io fleetio-mcp
- runcloud.usefulapi.io runcloud-mcp
- billomat.usefulapi.io billomat-mcp
- teamgate.usefulapi.io teamgate-mcp
- synchroteam.usefulapi.io synchroteam-mcp
- sendlane.usefulapi.io sendlane-mcp
- klippa-dochorizon.usefulapi.io klippa-dochorizon-mcp
- pipeline-crm.usefulapi.io pipeline-crm-mcp
123 more sit on this domain. All of them.