Skip to main content
Glama
johnalvero

Promotexter MCP Server

by johnalvero

Promotexter MCP Server

A Model Context Protocol (MCP) server for integrating with the Promotexter SMS API. This server provides tools for sending SMS messages and checking account balance.

Features

  • Balance Inquiry: Check your current Promotexter account balance with detailed information (available balance, account balance, credit limit, withheld amount)

  • Single SMS Transaction: Send SMS messages to individual recipients

Related MCP server: iletiMerkezi MCP Server

Installation

Using pip

pip install promotexter-mcp
uvx promotexter-mcp

Quick Start

1. Get Your Promotexter Credentials

You'll need:

  • API Key

  • API Secret

  • Sender ID (must be whitelisted in your Promotexter account)

Get these from your Promotexter dashboard at https://promotexter.com

2. Set Environment Variables

export PROMOTEXTER_API_KEY="your_api_key_here"
export PROMOTEXTER_API_SECRET="your_api_secret_here"
export PROMOTEXTER_SENDER_ID="your_sender_id_here"

Or create a .env file:

PROMOTEXTER_API_KEY=your_api_key_here
PROMOTEXTER_API_SECRET=your_api_secret_here
PROMOTEXTER_SENDER_ID=your_sender_id_here

3. Configure MCP Client

For Claude Desktop

Add to your MCP settings file (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):

{
  "mcpServers": {
    "promotexter": {
      "command": "uvx",
      "args": ["promotexter-mcp"],
      "env": {
        "PROMOTEXTER_API_KEY": "your_api_key_here",
        "PROMOTEXTER_API_SECRET": "your_api_secret_here",
        "PROMOTEXTER_SENDER_ID": "your_sender_id_here"
      }
    }
  }
}

Or using environment variables from your shell:

{
  "mcpServers": {
    "promotexter": {
      "command": "uvx",
      "args": ["promotexter-mcp"]
    }
  }
}

For Claude Code CLI

Add to your MCP settings:

{
  "mcpServers": {
    "promotexter": {
      "command": "uvx",
      "args": ["promotexter-mcp"],
      "env": {
        "PROMOTEXTER_API_KEY": "your_api_key_here",
        "PROMOTEXTER_API_SECRET": "your_api_secret_here",
        "PROMOTEXTER_SENDER_ID": "your_sender_id_here"
      }
    }
  }
}

Available Tools

get_balance

Get the current account balance from Promotexter.

Parameters: None

Returns:

  • Available Balance

  • Account Balance

  • Credit Limit

  • Withheld Amount

Example:

get_balance()

Response:

Available Balance: 486
Account Balance: 486
Credit Limit: 0
Withheld: 0

send_sms

Send a single SMS message via Promotexter.

Parameters:

  • to (required): Recipient mobile number in international format (e.g., 639170000001)

  • text (required): Message content (maximum 1000 characters)

  • reference_id (optional): Your own reference ID for tracking

Note: The sender ID is configured via the PROMOTEXTER_SENDER_ID environment variable and must be whitelisted in your Promotexter account.

Returns: SMS send response with transaction details including:

  • Message ID

  • Remaining Balance

  • Transaction Cost

  • Unit Cost

  • Message Parts count

  • Operator Code

  • Recipient number

  • Sender ID

  • Reference ID (if provided)

Example:

send_sms(
    to="639170000001",
    text="Hello! This is a test message.",
    reference_id="test-001"
)

Response:

SMS Sent Successfully!
Message ID: abc123...
Remaining Balance: 485.50
Transaction Cost: 0.50
Unit Cost: 0.50
Message Parts: 1
Operator: PHLSMART
To: 639170000001
From: DEMO
Reference ID: test-001

Development

Running Locally

  1. Clone the repository:

git clone https://github.com/johnalvero/promotexter-mcp.git
cd promotexter-mcp
  1. Install dependencies:

pip install -e .
  1. Run the server:

python -m promotexter_mcp.server

Testing with MCP Inspector

fastmcp dev promotexter_mcp/server.py

API Documentation

For more information about the Promotexter API, visit:

Security Notes

  • Never commit your API credentials to version control

  • Use environment variables or secure credential management systems

  • The sender ID must be whitelisted in your Promotexter account before use

  • Ensure proper validation of recipient numbers before sending

  • Test thoroughly in a development environment before production use

Error Handling

The server includes comprehensive error handling for:

  • Missing or invalid credentials

  • HTTP errors from the Promotexter API

  • Invalid parameters

  • Network timeouts

  • Message length validation (max 1000 characters)

  • Invalid phone number formats

Requirements

  • Python 3.10 or higher

  • fastmcp >= 2.13.0

  • httpx >= 0.27.0

License

MIT License - see LICENSE file for details

Support

For issues related to:

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Changelog

0.1.1 (2025-11-01)

  • Updated documentation with correct installation instructions

  • Added uvx support in configuration examples

  • Improved README with detailed examples and responses

  • Added package exclusions for cleaner distribution

0.1.0 (2025-11-01)

  • Initial release

  • Balance inquiry tool

  • Single SMS transaction tool

  • Environment-based configuration

  • Comprehensive error handling

Available Tools

2 tools
get_balanceB

Get the current account balance from Promotexter.

Returns: Account balance information

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It mentions the return type ('Account balance information') but lacks details on authentication needs, rate limits, or what specific data is included in the balance. This is insufficient for a tool with no annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is brief and front-loaded with the main purpose, followed by a returns section. It avoids unnecessary words, though the returns section could be more specific to enhance clarity without adding bulk.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no parameters, annotations, but an output schema, the description is minimally adequate. It states the purpose and return type, but lacks context on usage, authentication, or detailed behavior, leaving gaps despite the output schema covering return values.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has 0 parameters with 100% schema description coverage, so the schema fully documents the inputs. The description doesn't add parameter details, but with no parameters, this is acceptable, and it implies no input is needed, aligning with the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get') and resource ('current account balance from Promotexter'), making the purpose understandable. However, it doesn't differentiate from the sibling tool 'send_sms' which is unrelated, so it doesn't reach the highest score of 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives or in what context. The description only states what it does, not when it should be used, leaving the agent without usage direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_smsA

Send a single SMS message via Promotexter.

Args: to: Recipient mobile number (must be valid mobile number format) text: Message content (maximum 1000 characters) reference_id: Optional reference ID for tracking

Returns: SMS send response with transaction details

ParametersJSON Schema
NameRequiredDescriptionDefault
toYes
textYes
reference_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. While it mentions the action ('Send') and return type ('SMS send response with transaction details'), it lacks critical behavioral information such as authentication requirements, rate limits, error conditions, cost implications, or delivery guarantees. The description provides basic functional information but misses important operational context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is perfectly structured and economical. It begins with a clear purpose statement, then provides organized parameter documentation in an Args/Returns format, with each sentence serving a specific purpose. No wasted words or redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that there's an output schema (which handles return values), the description covers the basic purpose and parameters well. However, for a mutation tool with no annotations, it should provide more behavioral context about authentication, costs, or operational constraints. The parameter documentation is excellent, but overall completeness is limited by the lack of behavioral transparency.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description fully compensates by providing clear semantic meaning for all 3 parameters. It explains what 'to' represents (recipient mobile number with format requirement), what 'text' contains (message content with length limit), and the purpose of 'reference_id' (optional tracking). This adds significant value beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Send a single SMS message'), identifies the resource ('via Promotexter'), and distinguishes it from the only sibling tool 'get_balance' which is a read operation. The verb+resource combination is precise and 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/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context through the parameter documentation (e.g., 'must be valid mobile number format', 'maximum 1000 characters'), but doesn't explicitly state when to use this tool versus alternatives or any prerequisites. There's no explicit guidance on when-not-to-use or comparison with sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

B3.4/5.0
Disambiguation5/5

The two tools have completely distinct purposes: get_balance retrieves account information, while send_sms sends messages. There is no overlap in functionality, and an agent would never confuse one for the other.

Naming Consistency5/5

Both tools follow a consistent verb_noun pattern (get_balance, send_sms) with clear, descriptive names. The naming convention is uniform throughout the toolset.

Tool Count2/5

With only two tools, the server feels severely underpowered for an SMS service domain. There are obvious missing operations like checking SMS status, viewing message history, managing contacts, or handling bulk sends that would be expected in a complete SMS API surface.

Completeness2/5

The toolset is severely incomplete for an SMS service. While it covers basic balance checking and message sending, it lacks essential operations like viewing sent messages, checking delivery status, managing templates, or handling errors. This will cause significant agent failures when trying to perform common SMS workflows.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    C
    quality
    D
    maintenance
    Enables AI agents to send, receive, schedule, and manage SMS and MMS messages using the Twilio Programmable Messaging API. It provides comprehensive tools for handling bulk messaging, conversation threads, and real-time inbox monitoring through a secure, production-grade architecture.
    16
    1
    MIT
  • F
    license
    A
    quality
    D
    maintenance
    Enables sending SMS messages and checking delivery status and credit balance via the web2sms.ro Romanian SMS gateway.
    3
    -

Latest Blog Posts

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/johnalvero/promotexter-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server