NOTIFY
by n0t1fy · remote · no sign-in to list tools · v0.2.0 · published by GitHub user n0t1fy
SMS verification codes for Georgia (+995), sent and checked. Try test codes with a free test key.
5 tools: 3 do something that can't be undone, 1 change things and 1 only read.
Scanned Oct 21, 2026
- Deletes or cancels0Claude Code: deny
- Can't be undone3Claude Code: ask: see these tools
- Changes things1Claude Code: ask: see these tools
- Only reads1Claude Code: allow: see these tools
No check matched anything in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http notify-sms-georgia https://api.n0t1fy.dev/mcpTools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
5 tools
Can't be undone 3Claude Code: ask
check_verificationCheck the code the human typed, for the number the code was sent to.No findings
Why it is in this group
- The input addresses people (input.to): what it sends cannot be taken back.
- The input takes a statement or command to run (input.code), which can change anything it can reach.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
send_messageSend one transactional SMS to a Georgian mobile number.No findings
Why it is in this group
- The name "send_message" says "send": a word for sending, and what is sent cannot be taken back.
- The input addresses people (input.to): what it sends cannot be taken back.
Description, as the server wrote it Send one transactional SMS to a Georgian mobile number. The text comes from a built-in template; there is no free text. 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.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
start_verificationVerify a Georgian mobile number: NOTIFY makes a random six-digit code and sends it by SMS with a built-in template.No findings
Why it is in this group
- The name "start_verification" says "start": a word for a change.
- The input addresses people (input.to): what it sends cannot be taken back.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
Changes things 1Claude Code: ask
create_test_keyGet an sk_test_ API key instantly, with no account and no human.No findings
Why it is in this group
- The name "create_test_key" says "create": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
Only reads 1Claude Code: allow
get_messageRead the current state of a message sent with a key of the same project.No findings
Why it is in this group
- The name "get_message" says "get": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 0.2.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http notify-sms-georgia https://api.n0t1fy.dev/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__notify-sms-georgia__get_message"
],
"ask": [
"mcp__notify-sms-georgia__create_test_key",
"mcp__notify-sms-georgia__send_message",
"mcp__notify-sms-georgia__start_verification",
"mcp__notify-sms-georgia__check_verification"
],
"deny": []
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as notify-sms-georgia. Review it before you use it.
