mcp-server-thingpark

mcp-server-thingpark

An MCP server that enables AI assistants to manage LoRaWAN devices on Actility ThingPark, allowing device listing, details, and downlink command sending via natural language.

Category
Visit Server

README

MCP Server for Actility ThingPark

A Model Context Protocol (MCP) server that connects AI assistants to the Actility ThingPark LoRaWAN network server. Manage devices and send downlink commands through natural language.

Works with ThingPark Community, ThingPark Enterprise, and other deployments that expose the DX Core API.

Tools

Tool Description
list_devices List all registered LoRaWAN devices with DevEUI, class, and profile
get_device Get detailed device information by DevEUI
send_downlink Send a raw hex downlink payload to any device
get_downlink_queue View pending downlink messages for a device
invalidate_token Clear cached OAuth token (troubleshooting)

These tools work with any LoRaWAN device on your ThingPark account.

Sensor Helpers

The server auto-loads sensor-specific helper modules from sensors/. These provide high-level tools for configuring specific sensors without needing to know the raw hex payload format.

See sensors/SUPPORTED.md for the list of supported sensors and how to add your own.

Sensor Manufacturer Tools
LHT65N-VIB Dragino Transmit interval, vibration mode, sensitivity, alarm

Installation

Using uv (recommended)

When using uv no specific installation is needed. Use uvx to directly run the server:

uvx mcp-server-thingpark

Using pip

pip install mcp-server-thingpark

After installation, run it as:

mcp-server-thingpark

From source

git clone https://github.com/bbruhn91/mcp-server-thingpark.git
cd mcp-server-thingpark

python -m venv .venv
source .venv/bin/activate
pip install -e .

Configuration

The server requires three environment variables for ThingPark API authentication:

Variable Description Example
THINGPARK_URL ThingPark platform base URL https://community.thingpark.io/thingpark
THINGPARK_CLIENT_ID API client ID sub-XXXXXXXXX/your-username
THINGPARK_CLIENT_SECRET API client secret your-client-secret

Getting API Credentials

  1. Log in to your ThingPark platform (e.g. community.thingpark.io)
  2. Go to your account settings
  3. Create an API client with client_credentials grant type
  4. Note the client ID (sub-XXXXXXXXX/username) and client secret

Usage with Claude Desktop

Add to your Claude Desktop configuration file:

<details> <summary>macOS: ~/Library/Application Support/Claude/claude_desktop_config.json</summary>

{
  "mcpServers": {
    "thingpark": {
      "command": "uvx",
      "args": ["mcp-server-thingpark"],
      "env": {
        "THINGPARK_URL": "https://community.thingpark.io/thingpark",
        "THINGPARK_CLIENT_ID": "sub-XXXXXXXXX/your-username",
        "THINGPARK_CLIENT_SECRET": "your-client-secret"
      }
    }
  }
}

</details>

<details> <summary>Windows: %APPDATA%\Claude\claude_desktop_config.json</summary>

{
  "mcpServers": {
    "thingpark": {
      "command": "uvx",
      "args": ["mcp-server-thingpark"],
      "env": {
        "THINGPARK_URL": "https://community.thingpark.io/thingpark",
        "THINGPARK_CLIENT_ID": "sub-XXXXXXXXX/your-username",
        "THINGPARK_CLIENT_SECRET": "your-client-secret"
      }
    }
  }
}

</details>

Usage with Claude Code

Add to ~/.claude/.mcp.json:

{
  "mcpServers": {
    "thingpark": {
      "command": "uvx",
      "args": ["mcp-server-thingpark"],
      "env": {
        "THINGPARK_URL": "https://community.thingpark.io/thingpark",
        "THINGPARK_CLIENT_ID": "sub-XXXXXXXXX/your-username",
        "THINGPARK_CLIENT_SECRET": "your-client-secret"
      }
    }
  }
}

Usage with VS Code

Install the MCP extension and add to your VS Code settings or .vscode/mcp.json:

{
  "mcp": {
    "servers": {
      "thingpark": {
        "command": "uvx",
        "args": ["mcp-server-thingpark"],
        "env": {
          "THINGPARK_URL": "https://community.thingpark.io/thingpark",
          "THINGPARK_CLIENT_ID": "sub-XXXXXXXXX/your-username",
          "THINGPARK_CLIENT_SECRET": "your-client-secret"
        }
      }
    }
  }
}

Examples

> List all my LoRaWAN devices

> Show me details for device A84041F21867E433

> Send downlink 0100003C to device A84041F21867E433 on FPort 2

> Set the transmit interval to 60 seconds on my vibration sensor

Adding Support for a New Sensor

  1. Create src/mcp_server_thingpark/sensors/<sensor_name>.py with a register(mcp, send_downlink) function:
def register(mcp, send_downlink):
    @mcp.tool()
    def my_sensor_set_interval(dev_eui: str, seconds: int) -> str:
        """Set transmit interval for MySensor."""
        payload = f"01{seconds:06X}"
        return send_downlink(dev_eui, payload, fport=2)
  1. Create src/mcp_server_thingpark/sensors/<sensor_name>.md with the downlink command reference
  2. Add a row to src/mcp_server_thingpark/sensors/SUPPORTED.md
  3. Submit a PR

The module is auto-discovered on startup — no need to edit server.py.

Debugging

You can use the MCP inspector to debug the server:

npx @modelcontextprotocol/inspector uvx mcp-server-thingpark

Increase logging verbosity with the -v flag:

mcp-server-thingpark -v     # INFO level
mcp-server-thingpark -vv    # DEBUG level

Technical Notes

DevEUI vs ref

The ThingPark DX Core API uses an internal ref identifier in URL paths, not the DevEUI. This server maps DevEUI to ref automatically — you always use DevEUIs.

Authentication

OAuth2 client credentials flow against the ThingPark Keycloak OIDC endpoint. Tokens are cached and refreshed automatically.

License

This project is licensed under the MIT License — see the LICENSE file for details.

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured