mirror of
https://github.com/aljazceru/mcp-python-sdk.git
synced 2025-12-18 14:34:27 +01:00
69 lines
2.0 KiB
Python
69 lines
2.0 KiB
Python
# /// script
|
|
# dependencies = []
|
|
# ///
|
|
|
|
"""
|
|
FastMCP Text Me Server
|
|
--------------------------------
|
|
This defines a simple FastMCP server that sends a text message to a phone number via https://surgemsg.com/.
|
|
|
|
To run this example, create a `.env` file with the following values:
|
|
|
|
SURGE_API_KEY=...
|
|
SURGE_ACCOUNT_ID=...
|
|
SURGE_MY_PHONE_NUMBER=...
|
|
SURGE_MY_FIRST_NAME=...
|
|
SURGE_MY_LAST_NAME=...
|
|
|
|
Visit https://surgemsg.com/ and click "Get Started" to obtain these values.
|
|
"""
|
|
|
|
from typing import Annotated
|
|
|
|
import httpx
|
|
from pydantic import BeforeValidator
|
|
from pydantic_settings import BaseSettings, SettingsConfigDict
|
|
|
|
from mcp.server.fastmcp import FastMCP
|
|
|
|
|
|
class SurgeSettings(BaseSettings):
|
|
model_config: SettingsConfigDict = SettingsConfigDict(env_prefix="SURGE_", env_file=".env")
|
|
|
|
api_key: str
|
|
account_id: str
|
|
my_phone_number: Annotated[str, BeforeValidator(lambda v: "+" + v if not v.startswith("+") else v)]
|
|
my_first_name: str
|
|
my_last_name: str
|
|
|
|
|
|
# Create server
|
|
mcp = FastMCP("Text me")
|
|
surge_settings = SurgeSettings() # type: ignore
|
|
|
|
|
|
@mcp.tool(name="textme", description="Send a text message to me")
|
|
def text_me(text_content: str) -> str:
|
|
"""Send a text message to a phone number via https://surgemsg.com/"""
|
|
with httpx.Client() as client:
|
|
response = client.post(
|
|
"https://api.surgemsg.com/messages",
|
|
headers={
|
|
"Authorization": f"Bearer {surge_settings.api_key}",
|
|
"Surge-Account": surge_settings.account_id,
|
|
"Content-Type": "application/json",
|
|
},
|
|
json={
|
|
"body": text_content,
|
|
"conversation": {
|
|
"contact": {
|
|
"first_name": surge_settings.my_first_name,
|
|
"last_name": surge_settings.my_last_name,
|
|
"phone_number": surge_settings.my_phone_number,
|
|
}
|
|
},
|
|
},
|
|
)
|
|
response.raise_for_status()
|
|
return f"Message sent: {text_content}"
|