main.py•8 kB
# generated by fastapi-codegen:
# filename: openapi.yaml
# timestamp: 2025-06-29T03:53:55+00:00
import argparse
import json
import os
from typing import *
from typing import Union
from autogen.mcp.mcp_proxy import MCPProxy
from autogen.mcp.mcp_proxy.security import BaseSecurity
from fastapi import Query
from models import (
ComptageReponse,
ComptageRequest,
Credit,
CreditResponse,
DelListeNoire,
Erreur,
GetListeNoire,
HLRReponse,
HLRrequest,
LISTENOIREReponse,
RapportCampagne,
REPERTOIREcreatereponse,
REPERTOIREcreaterequest,
REPERTOIREmodifreponse,
REPERTOIREmodifrequest,
SetlisteNoire,
ShortlinkRequest,
ShortlinkResponse,
SMSReponse,
SMSRequest,
SmsUniqueRequest,
SubaccountAddRequest,
SubaccountAddResponse,
SubaccountRequest,
SubaccountResponse,
)
app = MCPProxy(
contact={
'email': 'support@isendpro.com',
'name': 'iSendPro Support Team',
'url': 'https://www.isendpro.com/',
'x-twitter': 'isendpro',
},
description='[1] Liste des fonctionnalités :\n- envoi de SMS à un ou plusieurs destinataires,\n- lookup HLR,\n- récupération des récapitulatifs de campagne,\n- gestion des répertoires,\n- ajout en liste noire.\n- comptage du nombre de caractères des SMS\n\n[2] Pour utiliser cette API vous devez:\n- Créer un compte iSendPro sur https://isendpro.com/\n- Créditer votre compte \n - Remarque: obtention d\'un crédit de test possible sous conditions\n- Noter votre clé de compte (keyid)\n - Elle vous sera indispensable à l\'utilisation de l\'API\n - Vous pouvez la trouver dans le rubrique mon "compte", sous-rubrique "mon API"\n- Configurer le contrôle IP\n - Le contrôle IP est configurable dans le rubrique mon "compte", sous-rubrique "mon API"\n - Il s\'agit d\'un système de liste blanche, vous devez entrer les IP utilisées pour appeler l\'API\n - Vous pouvez également désactiver totalement le contrôle IP\n',
title='API iSendPro',
version='1.1.1',
servers=[
{'url': 'https://apirest.isendpro.com/cgi-bin'},
{'url': 'http://apirest.isendpro.com/cgi-bin'},
],
)
@app.get(
'/campagne',
description=""" Retourne les SMS envoyés sur une période donnée en fonction d'une date de début et d'une date de fin.
Les dates sont au format YYYY-MM-DD hh:mm.
Le fichier rapport de campagne est sous la forme d'un fichier zip + contenant un fichier csv contenant le détail des envois.
""",
tags=['sms_operations'],
)
def get_campagne(
keyid: str,
rapport_campagne: RapportCampagne = Query(..., alias='rapportCampagne'),
date_deb: str = ...,
date_fin: str = ...,
):
"""
Retourne les SMS envoyés sur une période donnée
"""
raise RuntimeError("Should be patched by MCPProxy and never executed")
@app.post(
'/comptage',
description=""" Compte le nombre de SMS necessaire à un envoi """,
tags=['character_counting'],
)
def comptage(body: ComptageRequest):
"""
Compter le nombre de caractère
"""
raise RuntimeError("Should be patched by MCPProxy and never executed")
@app.get(
'/credit',
description=""" Retourne le credit existant associe au compte.
""",
tags=['credit_management'],
)
def get_credit(keyid: str, credit: Credit = ...):
"""
Interrogation credit
"""
raise RuntimeError("Should be patched by MCPProxy and never executed")
@app.post(
'/dellistenoire',
description=""" Supprime un numero en liste noire """,
tags=['blacklist_management'],
)
def del_liste_noire(
keyid: str,
del_liste_noire: DelListeNoire = Query(..., alias='delListeNoire'),
num: str = ...,
):
"""
Ajoute un numero en liste noire
"""
raise RuntimeError("Should be patched by MCPProxy and never executed")
@app.post(
'/getlistenoire',
description=""" Retourne un fichier csv zippé contenant la liste noire """,
tags=['blacklist_management'],
)
def get_liste_noire(
keyid: str, get_liste_noire: GetListeNoire = Query(..., alias='getListeNoire')
):
"""
Retourne le liste noire
"""
raise RuntimeError("Should be patched by MCPProxy and never executed")
@app.post(
'/hlr',
description=""" Réalise un lookup HLR sur les numéros
""",
tags=['number_validation'],
)
def get_hlr(body: HLRrequest):
"""
Vérifier la validité d'un numéro
"""
raise RuntimeError("Should be patched by MCPProxy and never executed")
@app.post(
'/repertoire',
description=""" Cree un nouveau répertoire et retourne son identifiant. Cet identifiant pourra être utilisé pour ajouter ou supprimer des numéros via l'API. """,
tags=['directory_management'],
)
def repertoire_crea(body: REPERTOIREcreaterequest):
"""
Gestion repertoire (creation)
"""
raise RuntimeError("Should be patched by MCPProxy and never executed")
@app.put(
'/repertoire',
description=""" Ajoute ou supprime une liste de numéros à un répertoire existant. """,
tags=['directory_management'],
)
def repertoire(body: REPERTOIREmodifrequest):
"""
Gestion repertoire (modification)
"""
raise RuntimeError("Should be patched by MCPProxy and never executed")
@app.post(
'/setlistenoire',
description=""" Ajoute un numero en liste noire. Une fois ajouté, les requêtes d'envoi de SMS marketing vers ce numéro seront refusées. """,
tags=['blacklist_management'],
)
def set_liste_noire(
keyid: str,
setliste_noire: SetlisteNoire = Query(..., alias='setlisteNoire'),
num: str = ...,
):
"""
Ajoute un numero en liste noire
"""
raise RuntimeError("Should be patched by MCPProxy and never executed")
@app.post(
'/shortlink', description=""" add a shortlink """, tags=['shortlink_management']
)
def add_shortlink(body: ShortlinkRequest):
"""
add a shortlink
"""
raise RuntimeError("Should be patched by MCPProxy and never executed")
@app.post(
'/sms',
description=""" Envoi un sms vers un unique destinataire """,
tags=['sms_operations'],
)
def send_sms(body: SmsUniqueRequest):
"""
Envoyer un sms
"""
raise RuntimeError("Should be patched by MCPProxy and never executed")
@app.post(
'/smsmulti',
description=""" Envoi de SMS vers 1 ou plusieurs destinataires
""",
tags=['sms_operations'],
)
def send_sms_multi(body: SMSRequest):
"""
Envoyer des SMS
"""
raise RuntimeError("Should be patched by MCPProxy and never executed")
@app.post(
'/subaccount',
description=""" Ajoute un sous compte """,
tags=['user_subaccount_management'],
)
def subaccount_add(body: SubaccountAddRequest):
"""
Ajoute un sous compte
"""
raise RuntimeError("Should be patched by MCPProxy and never executed")
@app.put(
'/subaccount',
description=""" Edit a subaccount """,
tags=['user_subaccount_management'],
)
def subaccount_edit(body: SubaccountRequest):
"""
Edit a subaccount
"""
raise RuntimeError("Should be patched by MCPProxy and never executed")
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="MCP Server")
parser.add_argument(
"transport",
choices=["stdio", "sse", "streamable-http"],
help="Transport mode (stdio, sse or streamable-http)",
)
args = parser.parse_args()
if "CONFIG_PATH" in os.environ:
config_path = os.environ["CONFIG_PATH"]
app.load_configuration(config_path)
if "CONFIG" in os.environ:
config = os.environ["CONFIG"]
app.load_configuration_from_string(config)
if "SECURITY" in os.environ:
security_params = BaseSecurity.parse_security_parameters_from_env(
os.environ,
)
app.set_security_params(security_params)
mcp_settings = json.loads(os.environ.get("MCP_SETTINGS", "{}"))
app.get_mcp(**mcp_settings).run(transport=args.transport)