1nce-mcp-server
The 1NCE IoT Platform MCP Server is a Model Context Protocol server enabling AI agents to manage IoT connectivity through natural language interactions. It connects with the 1NCE API to provide streamlined access to IoT management functions such as order and SIM management, using secure token-based authentication.
1NCE IoT Platform MCP Server
A Model Context Protocol (MCP) server that enables AI agents to interact with the 1NCE IoT connectivity management platform through natural language.
Overview
This project provides a middleware layer that connects Large Language Models (LLMs) to the 1NCE API for managing IoT connectivity. It allows AI assistants to:
- Retrieve product information
- Manage orders
- Monitor SIM card status
- Check data and SMS quotas
- Update SIM configurations
- View connectivity information
By exposing these capabilities through the Model Context Protocol, AI agents can interact with IoT infrastructure using natural language, simplifying the management of connected devices.
Features
- Authentication: Secure OAuth 2.0 token-based authentication with 1NCE API
- Product Management: Query available IoT connectivity products
- Order Management: Create and track orders
- SIM Management: Monitor and configure SIM cards
- Resources: Direct access to SIM status and product data
- Prompts: Pre-defined interaction templates for common tasks
Prerequisites
- Python 3.8+
- FastMCP v2
- 1NCE account with API credentials
Installation
- Clone this repository
git clone https://github.com/yourusername/1nce-mcp-server.git
cd 1nce-mcp-server
- Install required dependencies
pip install fastmcp httpx
- Set environment variables with your 1NCE API credentials
export ONCE_CLIENT_ID="your_client_id"
export ONCE_CLIENT_SECRET="your_client_secret"
Usage
Installing with FastMCP
The recommended way to use this MCP server is to install it using the FastMCP CLI:
fastmcp install 1nce_mcp.py
This will make the server available to compatible MCP clients, including Claude Desktop.
Running Directly
For development or testing, you can run the server directly:
python 1nce_mcp.py
Using with a Client
You can interact with the server programmatically using the FastMCP client:
from fastmcp import Client
async with Client("1nce_mcp.py") as client:
# Get list of products
products = await client.call_tool("get_all_products")
print(products)
# Check SIM status
sim_status = await client.call_tool("get_sim_status", {"iccid": "your_sim_iccid"})
print(sim_status)
Available Tools
Product Tools
get_all_products()
- Retrieve all available 1NCE products
Order Tools
get_all_orders(page, page_size, sort)
- Get list of orders with paginationget_order_by_number(order_number)
- Get details of a specific ordercreate_order(products, delivery_address, customer_reference)
- Create a new order
SIM Tools
get_all_sims(page, page_size, query, sort)
- List SIM cards with filtering optionsget_sim_details(iccid)
- Get detailed information about a specific SIMget_sim_status(iccid)
- Check the connectivity status of a SIMget_sim_data_quota(iccid)
- Check remaining data quota for a SIMget_sim_sms_quota(iccid)
- Check remaining SMS quota for a SIMupdate_sim_status(iccid, status, label, imei_lock)
- Update SIM configurationget_sim_usage(iccid, start_date, end_date)
- Get usage statistics for a time periodget_sim_events(iccid, page, page_size, sort)
- Get event history for a SIMreset_sim_connectivity(iccid)
- Trigger a connectivity reset for a SIM
Examples
Checking SIM Status
from fastmcp import Client
async with Client("1nce_mcp.py") as client:
# Check SIM status
sim_status = await client.call_tool("get_sim_status", {
"iccid": "8988303000123456789"
})
print(f"SIM Status: {sim_status.get('status')}")
# Check data quota
quota = await client.call_tool("get_sim_data_quota", {
"iccid": "8988303000123456789"
})
print(f"Remaining data: {quota.get('volume')} MB")
print(f"Expires on: {quota.get('expiry_date')}")
Creating an Order
from fastmcp import Client
async with Client("1nce_mcp.py") as client:
# Create an order for 5 SIM cards
order = await client.call_tool("create_order", {
"products": [{"productId": 1001, "quantity": 5}],
"customer_reference": "IoT-Project-XYZ"
})
print(f"Order created with number: {order.get('order_number')}")
Security
- The MCP server requires 1NCE API credentials to be set as environment variables
- Authentication is performed using OAuth 2.0 with Basic Authentication
- Access tokens are obtained dynamically and not stored persistently
- The server only exposes necessary API operations, prioritizing read operations over write operations
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
This project is licensed under the MIT License - see the LICENSE file for details.