1nce-mcp-server

1nce-mcp-server

1

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

  1. Clone this repository
git clone https://github.com/yourusername/1nce-mcp-server.git
cd 1nce-mcp-server
  1. Install required dependencies
pip install fastmcp httpx
  1. 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 pagination
  • get_order_by_number(order_number) - Get details of a specific order
  • create_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 options
  • get_sim_details(iccid) - Get detailed information about a specific SIM
  • get_sim_status(iccid) - Check the connectivity status of a SIM
  • get_sim_data_quota(iccid) - Check remaining data quota for a SIM
  • get_sim_sms_quota(iccid) - Check remaining SMS quota for a SIM
  • update_sim_status(iccid, status, label, imei_lock) - Update SIM configuration
  • get_sim_usage(iccid, start_date, end_date) - Get usage statistics for a time period
  • get_sim_events(iccid, page, page_size, sort) - Get event history for a SIM
  • reset_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.

Acknowledgements

  • 1NCE for providing the IoT connectivity API
  • FastMCP for the MCP server framework
  • Anthropic for Claude AI assistant capabilities