NOTIFY
Server Details
SMS verification codes for Georgia (+995), sent and checked. Try test codes with a free test key.
- Status
- Healthy
- Uptime
- 100.0% over 22 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 5 tools
Each tool maps to a distinct action-resource pair: start/check verification, send/get message, and create a test key. The only near-overlap is that start_verification and send_message both dispatch SMS, but names and descriptions clearly separate verification codes from transactional templates.
All five tools use snake_case verb_noun naming: start_verification, check_verification, send_message, get_message, create_test_key. There are no mixed conventions or vague names.
Five tools are well within the appropriate range for this focused SMS verification/messaging service. Each tool supports a distinct part of the workflow, and create_test_key is justified for integration setup.
The core lifecycle is covered: start and check verification, send and read messages, plus test credentials. Minor gaps remain, such as listing message history or inspecting templates/team numbers, but these are largely dashboard-managed and do not block core workflows.
Available Tools
5 toolscheck_verificationCheck a verification codeAInspect
Check the code the human typed, for the number the code was sent to. The result is the verification only when it is approved; every other outcome is a tool error with an error.code. Let the user in only when a check answers 200 with status approved; treat every other answer, a timeout and a network error as not approved.
Errors: incorrect_code (attempts remain), too_many_attempts (start a new verification), recipient_mismatch (to is not the number the code was sent to), verification_expired, verification_closed (already approved or replaced), verification_not_found. A wrong code costs an attempt, and five close the verification: do not retry a check by yourself; ask the human for the code again.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | The number the code was sent to, which your application is about to mark as verified. | |
| code | Yes | The six digits the human typed, as a string. | |
| api_key | No | An sk_test_ key, for example from create_test_key. Leave it out to use the key in this MCP server's Authorization header. A live key (sk_live_) is refused here: tool arguments are kept in the conversation, so a live key belongs in the header. | |
| verification_id | Yes | The verification `id` from start_verification (ver_…). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say it is non-read-only, non-idempotent and non-destructive. The description adds substantial behavior the annotations cannot carry: the five-attempt budget that closes a verification, the fact a wrong code costs an attempt, and a full error taxonomy with meanings (recipient_mismatch, verification_closed, verification_expired, etc.).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, then outcome semantics, then the error list — a sensible order. It is slightly redundant, stating the 'approved only, everything else is not approved' rule twice in adjacent sentences, but nothing is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must carry return semantics, and it does: the success signal (200/approved) and every error code with its meaning and required follow-up. An agent has everything needed to call it and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented, including the api_key convention and the `to` pattern. The description adds flow context around `to` (it must match the number the code was sent to, else recipient_mismatch) but no format or syntax beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource — checking the code the human typed against the number it was sent to — and frames the outcome (verification only on approval). An agent can distinguish this from start_verification, which creates verifications rather than checking them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit decision rules: only admit the user on a 200/approved result, treat every other answer, timeout and network error as not approved, never self-retry, and ask the human for a new code. The `too_many_attempts` branch even points to starting a new verification as the alternative path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_test_keyGet a NOTIFY test keyAInspect
Get an sk_test_ API key instantly, with no account and no human. A test key never sends a real SMS and never spends credits, so a whole integration can be built and verified with it. Pass it as api_key to send_message and get_message, and keep it in the application's configuration (for example NOTIFY_API_KEY), never in source code. The result also has a claim_url for a human: opening it lets them sign in and take over the project. Anyone who opens it, signs in and confirms becomes the owner: give it only to the person who will own the project, and do not paste it into shared logs or tickets. Real SMS need an sk_live_ key that the human creates on the dashboard (https://n0t1fy.dev/dashboard). Limited to a few keys per minute and per day for each address: reuse a key you already have.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=false and destructiveHint=false; the description adds substantial behavioral context: the key never sends a real SMS or spends credits, the claim_url transfers ownership to whoever confirms, and there are per-minute and per-day rate limits per address. It also flags the secret-handling risk (never in source, logs, or tickets).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core action is front-loaded in the first sentence and each subsequent sentence carries distinct weight (security, ownership, live-key alternative, rate limits). It runs long and could be tightened, but there is little pure filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by explaining the returned fields (api_key and claim_url) and how to use them. Combined with secret-handling and rate-limit guidance, an agent has everything needed to call it and handle the result safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the rubric the baseline is 4. The description instead documents how the returned value should be consumed, which is useful but not a parameter-semantics contribution.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get an sk_test_ API key instantly,' and immediately names the concrete artifact returned (sk_test_ key, claim_url). The resource (a test API key) is unmistakably distinct from the sibling tools get_message and send_message, which consume the key rather than produce it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use (build and verify an integration without spending credits) and when-not-to-use (real SMS need an sk_live_ key created on the dashboard), plus the alternative of reusing an existing key. It also states exactly where the key goes (api_key to send_message/get_message, config not source) and who may use the claim_url.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_messageRead a message's statusARead-onlyIdempotentInspect
Read the current state of a message sent with a key of the same project. Poll only while status is queued or submitted: delivered, undeliverable and failed are final, and unknown never changes. Wait about 2 seconds before the first read and double the wait each time, up to 30 seconds. Always set a time limit (two minutes is generous for a test message); when it passes, treat the message as unconfirmed and do not send it again.
| Name | Required | Description | Default |
|---|---|---|---|
| api_key | No | An sk_test_ key, for example from create_test_key. Leave it out to use the key in this MCP server's Authorization header. A live key (sk_live_) is refused here: tool arguments are kept in the conversation, so a live key belongs in the header. | |
| message_id | Yes | The message `id` from send_message, such as msg_01J8…. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), but the description adds substantial behavior the annotations cannot convey: it is a polling loop, which states are final, backoff cadence, and a hard time limit with a do-not-resend rule. That is exactly the extra context an agent needs to avoid hammering the endpoint or double-sending.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, then the polling protocol in three tightly packed sentences. No filler; the timing numbers and terminal-state list are the operative content and every clause is actionable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description carries the return-value burden — and it does so by enumerating the status lifecycle the caller will observe. Combined with the timeout and backoff guidance, an agent has everything needed to invoke and interpret this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 goes beyond it by adding a cross-parameter constraint the schema does not state — the key must belong to the same project as the message being read. That reframes api_key as scoping rather than mere auth, which is a genuine, if modest, addition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Read') and resource ('current state of a message'), and anchors the resource to 'a message sent with a key of the same project', which ties it directly to the send_message sibling. An agent can immediately tell this is the read/poll counterpart to send_message, not a send or key-creation tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Exceptionally explicit: it says to poll only while status is queued or submitted, names the terminal states (delivered, undeliverable, failed) and the never-changing state (unknown), prescribes backoff (start ~2s, double, cap at 30s), and gives a timeout policy with the correct fallback action (treat as unconfirmed, do not resend). This is a complete when/when-not/how-often protocol.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_messageSend a code by SMSAIdempotentInspect
Send one transactional SMS to a Georgian mobile number. The text comes from a built-in template; there is no free text (every template: https://n0t1fy.dev/templates).
Team templates (service_down, service_up, incident_opened, support_ticket_urgent, job_failed, agent_alert) go only to numbers the project's owner confirmed on the dashboard's team page; with a test key, use the test numbers +995512345670 to +995512345679. A recipient_not_on_team error means the number is not confirmed on the team: ask the human to add it on the dashboard, and never retry by yourself. With a live key, a service or job must be a name on the owner's list there.
With a test key (sk_test_) nothing is really sent: a simulator answers. These recipients simulate outcomes: +995512345671 rejected (status failed); +995512345672 provider unreachable (error provider_unavailable: nothing was sent, retry with the same idempotency_key); +995512345673 ambiguous (status unknown); +995512345674 accepted, then undeliverable. Any other valid number is accepted, then delivered, within about 30 seconds. With a live key it sends a real SMS and spends one credit per segment.
Read message.status in the result. submitted: the provider accepted it, which is not yet delivery to the phone. failed: refused; message.error says why. unknown: it may or may not have been sent, so do not send it again automatically. replayed: true: this idempotency_key and request were already processed, and no second SMS was sent. Call get_message to learn the final outcome.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Recipient in E.164 format: `+9955` followed by eight digits. No other country or format is accepted, and numbers are never normalized on your behalf. | |
| locale | No | Language of the message: `ka` (Georgian, the default) or `en`. | ka |
| api_key | No | An sk_test_ key, for example from create_test_key. Leave it out to use the key in this MCP server's Authorization header. A live key (sk_live_) is refused here: tool arguments are kept in the conversation, so a live key belongs in the header. | |
| template | Yes | Which message to send. Message text is never free-form: every message is rendered from one of these templates. - `verification_code` (`code`): Your verification code is {code}. Do not share it with anyone. - `login_code` (`code`): Your sign-in code is {code}. If you did not request it, ignore this message. - `password_reset_code` (`code`, `minutes`): Your password reset code is {code}. It expires in {minutes} minutes. - `service_down` (`service`): Alert: {service} is down. Team only. - `service_up` (`service`): Resolved: {service} is up again. Team only. - `incident_opened` (`incident`): Urgent: incident {incident} needs attention. Team only. - `support_ticket_urgent` (`ticket`): Urgent: support ticket {ticket} is waiting for a reply. Team only. - `job_failed` (`job`): Failed: scheduled job {job} did not finish. Team only. - `agent_alert` (`agent`, `count`): {agent}: {count} new updates. Check your app. Team only. Team templates go only to numbers confirmed on the project's team on the dashboard (a test key: the test numbers only); any other number answers `403 recipient_not_on_team`. Every template, its blanks and who it may go to: /templates. | |
| variables | Yes | Values for the template's placeholders, all as JSON strings. A `code` is 4 to 8 digits; `minutes` is 1 to 999; an `incident` or `ticket` 1 to 8 digits; a `count` 1 to 99; an `agent` `your_agent` or `ai_assistant`; a `service` or `job` a name on the project's team page (a live key). Values that look like a link, a web address, or a phone number are refused. | |
| idempotency_key | Yes | A new unique value (a UUID) for each logical message. Reuse it only to retry the identical request: the retry then returns the original message instead of sending a second SMS. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes far beyond the annotations: test-key simulator behavior per recipient number, that a live send spends one credit per segment, that 'submitted' is not yet delivery, that 'unknown' must not be retried automatically, and that 'replayed: true' means no second SMS. This is exactly the operational context an agent needs before firing a side-effecting call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well front-loaded: purpose, then access rules, then test behavior, then result interpretation. It is long and duplicates the template/placeholder list already present in the schema, which costs a point, but every paragraph carries operational value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex, side-effecting tool with no output schema, the description covers recipient restrictions, template semantics, idempotency behavior, and how to read message.status and message.error. An agent could call it correctly, including failure handling, from this text alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 mostly restates what the template and idempotency_key schema entries already say (template list, no free text, reuse keys only for identical retries), though it adds the cross-field constraint that a team template combined with an unconfirmed recipient returns recipient_not_on_team.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific verb, resource, channel and geographic scope: 'Send one transactional SMS to a Georgian mobile number.' It also clarifies the hard constraint that text is never free-form. It does not differentiate itself from the sibling start_verification, which plausibly also triggers an SMS, so an agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly gives when-to-use conditions (team templates only to dashboard-confirmed numbers, test numbers with a test key), when-not (live key requires service/job names from the owner's list), and error routing ('ask the human to add it on the dashboard, and never retry by yourself'). It also routes to the sibling get_message for the final outcome, so nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_verificationSend a verification code that NOTIFY makesAIdempotentInspect
Verify a Georgian mobile number: NOTIFY makes a random six-digit code and sends it by SMS with a built-in template. The code is never shown to you: ask the human for the code they received, then call check_verification. A code works for 10 minutes and 5 checks, once; a new start for the same number replaces it.
With a test key (sk_test_), only the test numbers +995512345670 to +995512345679 are accepted and their code is always 000000; nothing is sent. At most 5 starts a minute go to one number, so spread test starts over the ten test numbers. +995512345671 simulates a refused SMS (status failed), +995512345672 an unreachable provider (error provider_unavailable: nothing was sent, retry with the same idempotency_key), +995512345673 an SMS that may or may not have arrived (still pending). With a live key it sends a real SMS and spends one credit.
replayed: true means this idempotency_key and request were already processed and no second SMS was sent; the verification it shows may say approved by then, which is not a check result. On too_many_verifications (5 an hour or 10 in a rolling 24 hours to one number), tell the human when they can try again (retry_at), and never retry by yourself.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | The phone number to verify, in E.164 format: `+9955` followed by eight digits. With a test key (`sk_test_`), only the test numbers +995512345670 to +995512345679 are accepted, and their code is always `000000`. | |
| locale | No | Language of the message: `ka` (Georgian, the default) or `en`. | ka |
| api_key | No | An sk_test_ key, for example from create_test_key. Leave it out to use the key in this MCP server's Authorization header. A live key (sk_live_) is refused here: tool arguments are kept in the conversation, so a live key belongs in the header. | |
| template | No | Which message carries the code. NOTIFY fills in the code, and the minutes where the template names them (10). | verification_code |
| idempotency_key | Yes | A new unique value (a UUID) for each code you want sent. Reuse it only to retry the identical request: the retry then returns the original verification instead of sending a second SMS. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety/idempotency profile (readOnlyHint=false, idempotentHint=true, openWorldHint=true), and the description still adds substantial context beyond them: 10-minute/5-check code lifetime, one-time use, replacement semantics, test-key simulation behavior per test number, credit spend on live keys, `replayed: true` meaning, and the provider_unavailable retry rule with the same idempotency_key.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and the check_verification handoff are front-loaded, and the test-key paragraph is a compact enumeration of edge cases. It is long and repeats the test-number range already present in the schema, but for a tool with this many failure modes most sentences earn their place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so: it explains `replayed: true`, the `failed` status for a refused SMS, `provider_unavailable` as an error with retry guidance, `pending` as inconclusive, and `too_many_verifications` with `retry_at`. Rate limits (5 starts/minute, 5/hour, 10/24h) and auth requirements for live vs test keys are all covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema does not: how idempotency_key interacts with `replayed: true`, that a new start replaces the previous code for the same number, and that the template determines the message that carries the code and the named 10-minute window. These are genuine semantic additions rather than restatement.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('Verify a Georgian mobile number') and immediately explains the mechanism: a random six-digit code sent by SMS via a built-in template. It also routes the agent to the natural sibling ('ask the human for the code they received, then call check_verification'), so the agent can distinguish this from check_verification without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use and when-not guidance: use check_verification after obtaining the human's code, use test numbers rather than one number for repeated test starts, and on too_many_verifications tell the human the retry_at time and 'never retry by yourself'. Alternatives and exclusions are both named.
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 tool update
- Changed
send_message3 fields changed- changed
Input schema / properties / template / descriptionPrevious value: -"Which message to send. Message text is never free-form: every message is rendered from one of these templates.\n\n- `verification_code` (`code`): Your verification code is {code}. Do not share it with anyone.\n- `login_code` (`code`): Your sign-in code is {code}. If you did not request it, ignore this message.\n- `password_reset_code` (`code`, `minutes`): Your password reset code is {code}. It expires in {minutes} minutes."New value: +"Which message to send. Message text is never free-form: every message is rendered from one of these templates.\n\n- `verification_code` (`code`): Your verification code is {code}. Do not share it with anyone.\n- `login_code` (`code`): Your sign-in code is {code}. If you did not request it, ignore this message.\n- `password_reset_code` (`code`, `minutes`): Your password reset code is {code}. It expires in {minutes} minutes.\n- `service_down` (`service`): Alert: {service} is down. Team only.\n- `service_up` (`service`): Resolved: {service} is up again. Team only.\n- `incident_opened` (`incident`): Urgent: incident {incident} needs attention. Team only.\n- `support_ticket_urgent` (`ticket`): Urgent: support ticket {ticket} is waiting for a reply. Team only.\n- `job_failed` (`job`): Failed: scheduled job {job} did not finish. Team only.\n- `agent_alert` (`agent`, `count`): {agent}: {count} new updates. Check your app. Team only.\n\nTeam templates go only to numbers confirmed on the project's team on the dashboard (a test key: the test numbers only); any other number answers `403 recipient_not_on_team`. Every template, its blanks and who it may go to: /templates." - changed
Input schema / properties / template / enumPrevious value: -[ - "verification_code", - "login_code", - "password_reset_code" -]New value: +[ + "verification_code", + "login_code", + "password_reset_code", + "service_down", + "service_up", + "incident_opened", + "support_ticket_urgent", + "job_failed", + "agent_alert" +] - changed
Input schema / properties / variables / descriptionPrevious value: -"Values for the template's placeholders, all as JSON strings. A `code` is 4 to 8 digits; `minutes` is 1 to 999. Values that look like a link, a web address, or a phone number are refused."New value: +"Values for the template's placeholders, all as JSON strings. A `code` is 4 to 8 digits; `minutes` is 1 to 999; an `incident` or `ticket` 1 to 8 digits; a `count` 1 to 99; an `agent` `your_agent` or `ai_assistant`; a `service` or `job` a name on the project's team page (a live key). Values that look like a link, a web address, or a phone number are refused."
2 tool updates
- Added
check_verification - Added
start_verification
3 tool updates
- First observed
create_test_key - First observed
get_message - First observed
send_message
Related MCP Connectors
Virtual phone numbers for SMS/OTP verification. Browse free; pay with credits or USDC (x402).
SMS Verify: SMS Verify API is a secure and easy-to-integrate service that sends verification codes.
Virtual phone numbers for SMS verification, OTP receipt, and number management.
Send SMS/WhatsApp and verify OTP codes in Morocco (+212) and worldwide. Direct carrier routing.
Related MCP Servers
- AlicenseAqualityCmaintenanceMCP server for SMS verification — get virtual phone numbers, receive OTP codes, and manage verifications for 500+ services across 50+ countries via the VirtualSMS API.40128 npm8MIT
- AlicenseAqualityCmaintenanceVirtual phone number platform for AI agents — rent numbers across 200+ countries, receive SMS, and manage the full activation lifecycle.6267 npm4MIT
- AlicenseNot gradedqualityBmaintenanceSend and verify one-time passcodes over SMS, WhatsApp and Telegram from any MCP client. Ten tools: send, verify, extend, delivery status, account, usage report, and agent account creation with credit top-ups over a 402. Hosted endpoint or run locally.1MIT
- AlicenseAqualityDmaintenanceGives AI agents real phone numbers to receive SMS and extract verification codes through tool calls.619 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.