thaibulksms
OfficialServer Quality Checklist
Latest release: v0.1.2
- Disambiguation5/5
Each tool targets a distinct action and resource: sending SMS, checking credits, and OTP flows are clearly separated. Even send_sms vs request_otp are distinguishable by purpose, with descriptions clarifying the OTP-specific nature.
Naming Consistency5/5All tools follow a consistent verb_noun pattern in snake_case, such as send_sms, check_sms_credit, request_otp, and verify_email_otp. The naming is uniform and predictable.
Tool Count5/5With 8 tools, the server is well-scoped, covering SMS and email sending, credit checks, and OTP verification. This is within the ideal range for a focused API integration.
Completeness4/5The server covers core operations for SMS and email, including send, credit check, and OTP flows. However, given the 'bulk' in the server name, a bulk send operation is missing, though single operations are adequately covered.
Average 4/5 across 8 of 8 tools scored.
See the Tool Scores section below for per-tool breakdowns.
- No community issues in the last 6 months
- 0 commits in the last 12 weeks
- No stable releases found
- No critical vulnerability alerts
- No high-severity vulnerability alerts
- No code scanning findings
- CI is passing
This repository is licensed under MIT License.
This repository includes a README.md file.
No tool usage detected in the last 30 days. Usage tracking helps demonstrate server value.
Tip: use the "Try in Browser" feature on the server page to seed initial usage.
Add a glama.json file to provide metadata about your server.
If you are the author, simply .
If the server belongs to an organization, first add
glama.jsonto the root of your repository:{ "$schema": "https://glama.ai/mcp/schemas/server.json", "maintainers": [ "your-github-username" ] }Then . Browse examples.
Add related servers to improve discoverability.
How to sync the server with GitHub?
Servers are automatically synced at least once per day, but you can also sync manually at any time to instantly update the server profile.
To manually sync the server, click the "Sync Server" button in the MCP server admin interface.
How is the quality score calculated?
The overall quality score combines two components: Tool Definition Quality (70%) and Server Coherence (30%).
Tool Definition Quality measures how well each tool describes itself to AI agents. Every tool is scored 1–5 across six dimensions: Purpose Clarity (25%), Usage Guidelines (20%), Behavioral Transparency (20%), Parameter Semantics (15%), Conciseness & Structure (10%), and Contextual Completeness (10%). The server-level definition quality score is calculated as 60% mean TDQS + 40% minimum TDQS, so a single poorly described tool pulls the score down.
Server Coherence evaluates how well the tools work together as a set, scoring four dimensions equally: Disambiguation (can agents tell tools apart?), Naming Consistency, Tool Count Appropriateness, and Completeness (are there gaps in the tool surface?).
Tiers are derived from the overall score: A (≥3.5), B (≥3.0), C (≥2.0), D (≥1.0), F (<1.0). B and above is considered passing.
Tool Scores
- Behavior3/5
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already set destructiveHint: true, signaling side effects. The description adds no further behavioral context such as cost, rate limits, or the fact that this does not verify the OTP. It does add the 'Thai mobile number' constraint, but that is more of a target parameter trait than a behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Conciseness5/5Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that conveys the essential information with no redundancy. It is highly concise and every word contributes to the meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Completeness4/5Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool, the description is adequate. The schema covers the parameter format, annotations cover side effects, and the purpose is clear. It does not discuss return values, but there is no output schema, and the tool's action is straightforward. Minor improvements could mention that verification is handled elsewhere, but it is not necessary for basic use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Parameters3/5Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully describes the only parameter 'msisdn' with format details (E.164 or domestic). The description merely repeats 'Thai mobile number' without adding new semantic meaning beyond the schema. With schema coverage at 100%, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Purpose5/5Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Request an OTP code via SMS to a Thai mobile number.' It uses a specific verb ('request') and identifies the resource (OTP via SMS), and it distinguishes from siblings like request_email_otp and verify_otp.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Usage Guidelines3/5Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool (when an OTP is needed via SMS to a Thai number) but does not explicitly mention alternatives or when not to use it. Given the sibling tools list, some differentiation is inherent, but no direct guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
- Behavior4/5
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
While the annotation destructiveHint: true already flags the side-effecting nature, the description adds a new behavioral constraint: 'Requires user confirmation before sending.' This goes beyond the annotation by specifying a mandatory approval step. It also clarifies that the tool sends only a single SMS, avoiding potential bulk-send assumptions. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Conciseness5/5Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, with the first stating the primary action and the second stating a critical prerequisite. Every word earns its place, and the key information is front-loaded. No redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Completeness4/5Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple: 3 fully documented parameters, a destructive annotation, and no output schema. The description covers the core purpose and the confirmation requirement, while the schema handles parameter details. The provider is named in the first sentence. This is sufficient for correct invocation, though not all possible edge cases (e.g., account prerequisites) are addressed, so a 4 rather than 5 is given.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Parameters3/5Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All three parameters are fully described in the input schema (100% coverage), including recipient format, message content, and sender default. The description adds no parameter-specific information. Per the rubric, with high schema coverage, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Purpose5/5Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with 'Send a single SMS via ThaiBulkSMS,' clearly stating the action (send), the resource (SMS), and the service provider. It distinguishes itself from sibling tools like send_email by specifying SMS, and the word 'single' defines the scope. This meets the 'specific verb+resource' benchmark.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Usage Guidelines2/5Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no guidance on when to use this tool versus alternatives (e.g., send_email or OTP tools). The 'Requires user confirmation before sending' note is a precondition, not usage context. No exclusions or alternative recommendations are provided, leaving the agent without decision-making support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
- Behavior3/5
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already conveys this is a safe read operation. The description adds no extra behavioral context such as authentication requirements, rate limits, or caching behavior. However, for a simple zero-parameter balance check, the annotation covers the main safety concern, so the description does not need to add much.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Conciseness5/5Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is concise and front-loaded with the action and resource. Every word earns its place, with no unnecessary fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Completeness4/5Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (zero parameters, no output schema, read-only annotation), the description is adequately complete. It identifies the specific service (ThaiBulkSMS) and the resource (SMS credit). While it doesn't describe the return format, that is not critical for a simple balance check and is implied.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Parameters4/5Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description does not need to explain any. Per the rubric, a zero-parameter tool is a baseline 4, and the description clearly specifies what is being checked, which is sufficient given the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Purpose5/5Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool checks the remaining SMS credit balance on ThaiBulkSMS, using a specific verb ('Check') and resource ('SMS credit balance'). It distinguishes from sibling check_email_credit by specifying SMS, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Usage Guidelines3/5Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used to monitor SMS credit, especially before sending messages, but does not explicitly state when to use it versus alternatives like check_email_credit. There is no mention of exclusions or conditions, so usage guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
- Behavior3/5
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation destructiveHint=true already signals a state-changing/side-effect operation, and the description adds the context of using a ThaiBulkMail OTP template. Beyond that, it does not disclose additional behaviors like rate limits, costs, or return formats, but given the annotation coverage, a score of 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Conciseness5/5Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with a clear verb and object. It follows the pattern of stating the action, target, and service, with zero wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Completeness4/5Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 required params, no output schema), the description sufficiently explains what it does and mentions the external service (ThaiBulkMail). The destructiveHint annotation covers side-effect expectations. While it does not elaborate on return values or failure cases, the tool is straightforward enough that this is acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Parameters3/5Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description's mention of 'ThaiBulkMail OTP template' echoes the schema description for template_uuid without adding new meaning about parameter formats, constraints, or relationships. No extra semantic value is provided beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Purpose5/5Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Send') and identifies the resource ('OTP code via email') and service ('ThaiBulkMail OTP template'). It clearly distinguishes this tool from siblings like send_sms (SMS OTP) and request_otp (generic OTP request) by specifying email delivery and template usage.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Usage Guidelines4/5Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies the tool is for sending email OTPs via ThaiBulkMail, which is a distinct use case among the siblings. However, it does not explicitly state when not to use it (e.g., not for SMS) or mention alternative tools by name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
- Behavior3/5
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds the relationship between the token and a prior request_email_otp call, which is useful context beyond the idempotentHint annotation. It does not disclose any side effects, error behavior, or code expiration, but the annotation already covers idempotency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Conciseness5/5Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one short sentence that front-loads the action and key context, with no extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Completeness4/5Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description fully explains the tool's purpose and prerequisite, making it adequate for a simple two-parameter tool. It does not mention the return value or failure behavior, but the lack of an output schema and the simplicity of the operation make this a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Parameters3/5Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides clear descriptions for both parameters (token and otp_code), and the description does not repeat or add parameter details. With 100% schema coverage, the description's minimal contribution is acceptable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Purpose5/5Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function with a specific verb ('verify') and resource ('an email OTP code'), and references the prerequisite token from request_email_otp. This distinguishes it from siblings like verify_otp and request_email_otp.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Usage Guidelines4/5Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the usage context: it must be called after requesting an OTP via request_email_otp, using the token from that call. It does not explicitly mention alternatives or exclusions, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
- Behavior3/5
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation adds idempotentHint=true, and the description does not contradict this. The description adds a prerequisite (previous request_otp call) but does not disclose other behaviors such as whether the token is consumed on success/failure or what the response format is. Given the annotation already covers idempotency, the description provides only modest additional transparency, aligning with a mid-range score.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Conciseness5/5Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no redundant or extraneous words. It is front-loaded with the action and delivers the essential information efficiently. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Completeness4/5Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, with two well-documented parameters and a clear prerequisite. The description covers the purpose and the relationship to request_otp adequately. However, there is no output schema and the description does not mention return values or side effects (e.g., token invalidation). This leaves a small gap but is generally complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Parameters3/5Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with both 'token' and 'pin' documented. The description only mentions the parameters without adding meaning beyond the schema. Since the structured schema already explains each parameter, the baseline of 3 is appropriate and the description does not need to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Purpose5/5Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Verify' and identifies the resource as 'an OTP PIN against a token from a previous request_otp call.' This clearly distinguishes it from sibling tools like verify_email_otp and request_otp by specifying the exact token source. The scope is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Usage Guidelines4/5Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'from a previous request_otp call' establishes a clear precondition and implies the tool should be used after request_otp. It does not explicitly exclude alternatives like verify_email_otp, but the reference to request_otp rather than request_email_otp provides an implicit distinction. No exclusions or alternative guidance is present, preventing a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
- Behavior4/5
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Given destructiveHint: true, the description adds the important behavioral context that user confirmation is required before sending. It also specifies the use of a template, which is beyond the annotation's safety hint. No contradictions exist between description and annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Conciseness5/5Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences, front-loaded with the action and service. No unnecessary words, efficiently conveying the core purpose and a critical usage condition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Completeness4/5Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, service, template method, and user confirmation, while the schema covers parameters and annotations cover destructive nature. It lacks information about return values or post-send behavior, but given the simple send operation and no output schema, this is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Parameters3/5Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, each parameter is already described in the schema. The description's mention of 'using a template' aligns with template_uuid but doesn't add new meaning beyond the existing field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Purpose5/5Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's function: sending an email via the ThaiBulkMail service using a template. It distinguishes from sibling send_sms by specifying email and the service name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Usage Guidelines4/5Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the key precondition 'Requires user confirmation,' implying the agent should obtain consent before invocation. However, it doesn't explicitly mention alternative tools or when not to use it; the sibling context (send_sms, etc.) provides implicit separation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
- Behavior3/5
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description aligns with the readOnlyHint annotation and makes the read-only nature obvious. However, it adds no behavioral context beyond what the annotation already provides, such as rate limits, response format, or side-effect details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Conciseness5/5Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It communicates the tool's purpose and scope efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Completeness5/5Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only balance check with no inputs and no output schema, the description is sufficiently complete. It names the provider and resource, making it clear what the user gets from this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Parameters4/5Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters and an empty input schema, the description does not need to explain parameters. The baseline for 0-param tools is 4, and no additional parameter information is required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Purpose5/5Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Check'), the resource ('remaining email credit balance'), and the context ('on ThaiBulkMail'). It distinguishes itself from sibling tools like check_sms_credit by specifying email credit specifically.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Usage Guidelines4/5Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies use when needing to check email credit balance, but does not explicitly state when not to use it or mention alternatives. Context is clear, though no exclusions or alternative tool references are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
GitHub Badge
Glama performs regular codebase and documentation scans to:
- Confirm that the MCP server is working as expected.
- Confirm that there are no obvious security issues.
- Evaluate tool definition quality.
Our badge communicates server capabilities, safety, and installation instructions.
Card Badge
Copy to your README.md:
Score Badge
Copy to your README.md:
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/thaibulksms/tbs'
If you have feedback or need assistance with the MCP directory API, please join our Discord server