NOTIFY

SMS verification codes for Georgia (+995), sent and checked. Try test codes with a free test key.

我該用這個嗎

品質與安全性

A
說明品質
100%
結構描述完整度
86%
命名品質
100%
汙染風險
60%
權限相符程度
100%
協定合規性
100%

發現項目(3)

  • HIGHTool poisoning patterns detected
  • MEDIUMTool description contains URL to non-standard domain在 create_test_key 中
  • LOWTool description contains role marker that could confuse chat models在 create_test_key 中

根據工具定義與協定合規性的自動化分析。

上下文成本

~2,237Token(工具定義)
~2.6 KB典型回應大小
中等的注意力影響(128k 上下文的 1.75%)

這是每次將伺服器的工具載入模型上下文時所消耗的約略 token 數量。數量越高,可用於其他工作的注意力就越少。

安裝

一鍵安裝

將以下內容加入你的 `claude_desktop_config.json` 檔案:

{
  "mcpServers": {
    "notify-sms-georgia": {
      "url": "https://api.n0t1fy.dev/mcp"
    }
  }
}

遠端端點

https://api.n0t1fy.dev/mcpstreamable-http

它能做什麼

工具清單

工具(5)

🟢 唯讀🟡 寫入🔴 刪除⚪ 未知
🟡create_test_key

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.

輸入結構描述

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
🟡send_message(to, template, variables, locale, idempotency_key, ...)

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.

輸入結構描述

{
  "type": "object",
  "properties": {
    "to": {
      "type": "string",
      "pattern": "^\\+9955[0-9]{8}$",
      "description": "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."
    },
    "template": {
      "type": "string",
      "enum": [
        "verification_code",
        "login_code",
        "password_reset_code"
      ],
      "description": "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."
    },
    "variables": {
      "type": "object",
      "additionalProperties": {
        "type": "string"
      },
      "description": "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."
    },
    "locale": {
      "type": "string",
      "enum": [
        "ka",
        "en"
      ],
      "default": "ka",
      "description": "Language of the message: `ka` (Georgian, the default) or `en`."
    },
    "idempotency_key": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "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."
    },
    "api_key": {
      "type": "string",
      "description": "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."
    }
  },
  "required": [
    "to",
    "template",
    "variables",
    "idempotency_key"
  ],
  "additionalProperties": false
}
🟢start_verification(to, template, locale, idempotency_key, api_key)

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.

輸入結構描述

{
  "type": "object",
  "properties": {
    "to": {
      "type": "string",
      "pattern": "^\\+9955[0-9]{8}$",
      "description": "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`."
    },
    "template": {
      "type": "string",
      "enum": [
        "verification_code",
        "login_code",
        "password_reset_code"
      ],
      "default": "verification_code",
      "description": "Which message carries the code. NOTIFY fills in the code, and the minutes where the template names them (10)."
    },
    "locale": {
      "type": "string",
      "enum": [
        "ka",
        "en"
      ],
      "default": "ka",
      "description": "Language of the message: `ka` (Georgian, the default) or `en`."
    },
    "idempotency_key": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "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."
    },
    "api_key": {
      "type": "string",
      "description": "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."
    }
  },
  "required": [
    "to",
    "idempotency_key"
  ],
  "additionalProperties": false
}
🟢check_verification(verification_id, to, code, api_key)

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.

輸入結構描述

{
  "type": "object",
  "properties": {
    "verification_id": {
      "type": "string",
      "description": "The verification `id` from start_verification (ver_…)."
    },
    "to": {
      "type": "string",
      "pattern": "^\\+9955[0-9]{8}$",
      "description": "The number the code was sent to, which your application is about to mark as verified."
    },
    "code": {
      "type": "string",
      "pattern": "^[0-9]{6}$",
      "description": "The six digits the human typed, as a string."
    },
    "api_key": {
      "type": "string",
      "description": "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."
    }
  },
  "required": [
    "verification_id",
    "to",
    "code"
  ],
  "additionalProperties": false
}
🟢get_message(message_id, api_key)

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.

輸入結構描述

{
  "type": "object",
  "properties": {
    "message_id": {
      "type": "string",
      "description": "The message `id` from send_message, such as msg_01J8…."
    },
    "api_key": {
      "type": "string",
      "description": "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."
    }
  },
  "required": [
    "message_id"
  ],
  "additionalProperties": false
}

社群

為此伺服器評分

證據

近期觀測

已驗證未記錄版本5 個工具