Skip to main content
Glama

OmniMCP — The Universal Interface Between AI and Industrial Hardware

A universal hardware capability layer that enables AI agents to discover, monitor, and control industrial devices through the Model Context Protocol (MCP).

Model Context Protocol Built with NitroStack Status

OmniMCP is an MCP server built using NitroStack that provides a unified interface between AI applications and industrial hardware. Instead of building custom integrations for every device, OmniMCP allows hardware to be connected through lightweight adapters that expose standardized capabilities via the Model Context Protocol (MCP).

Our prototype currently includes an ESP32 Machine Controller and an Inspection Camera Adapter, with an architecture designed to support PLCs, CNC machines, robots, sensors, and other Industry 4.0 devices.


Table of Contents


Overview

Industrial hardware typically exposes different APIs, SDKs, and communication protocols, making AI integration complex and difficult to scale.

OmniMCP solves this by introducing a universal hardware capability layer built on the Model Context Protocol (MCP).

Each supported device is wrapped in a lightweight adapter that exposes common capabilities such as:

  • Machine control

  • Device monitoring

  • Image capture

  • Sensor access

This allows AI assistants to interact with different hardware through a single, standardized interface without worrying about vendor-specific implementations.


What is MCP?

The Model Context Protocol (MCP) is an open standard that enables AI assistants to securely interact with external tools, services, and hardware.

OmniMCP exposes industrial devices as MCP Tools, Resources, and Prompts, making them compatible with clients such as:

  • Claude Desktop

  • Cursor

  • NitroStudio

  • MCP Inspector

  • Any MCP-compatible client


Features

  • Universal hardware abstraction layer

  • Modular adapter-based architecture

  • ESP32 Machine Controller

  • Inspection Camera Adapter

  • Automatic hardware discovery

  • Device connection management

  • MCP Tools

  • MCP Resources

  • MCP Prompts

  • Built and deployed using NitroStack

  • Easily extendable for future industrial hardware


Live Demo

🚀 Live MCP Endpoint

https://omnimcp-6a5b3a86-d4rk-null-amrita-university-amritapuri-campus.app.nitrocloud.ai

💻 GitHub Repository

https://github.com/gautham-sai05/omni-mcp

Available Hardware

ESP32 Machine Controller

Capabilities:

  • Connect to hardware

  • Execute commands

  • Read device status

  • Simulate industrial machine control


Related MCP server: MQTT MCP Server

Inspection Camera Adapter

Capabilities:

  • Capture inspection images

  • Standardized image responses

  • Laptop webcam support

  • Ready for ESP32-CAM integration


Available MCP Tools

Tool

Description

list_devices

Discover registered hardware

connect_device

Connect to a hardware adapter

disconnect_device

Disconnect hardware

device_status

Retrieve current device status

execute_command

Execute adapter-specific commands


Available MCP Resources

hardware://devices/available

hardware://devices/connected

hardware://system/health

Getting Started

Install

git clone https://github.com/gautham-sai05/omni-mcp.git

cd omni-mcp

npm install

Configure

Copy the environment file.

cp .env.example .env

Example:

PORT=3000

CAMERA_SOURCE=laptop

ESP32_CAM_URL=http://192.168.1.xxx

Run

npm run build

npm run start

The MCP endpoint will be available at

http://localhost:3000/mcp

Connect to an MCP Client

Example MCP configuration:

{
  "mcpServers": {
    "omnimcp": {
      "url": "https://omnimcp-6a5b3a86-d4rk-null-amrita-university-amritapuri-campus.app.nitrocloud.ai"
    }
  }
}

Compatible with:

  • Claude Desktop

  • Cursor

  • NitroStudio

  • MCP Inspector


Architecture

                 AI Client
      (Claude / Cursor / NitroStudio)
                    │
                    ▼
               OmniMCP Server
                    │
             Adapter Manager
          ┌─────────┴─────────┐
          ▼                   ▼
   ESP32 Adapter       Camera Adapter
          │                   │
          ▼                   ▼
   Machine Controller   Inspection Camera

Future Roadmap

Planned hardware adapters include:

  • PLCs

  • Robot Arms

  • CNC Machines

  • Modbus Devices

  • MQTT Devices

  • OPC-UA

  • Industrial Sensors

  • AI-powered Vision Systems

  • Digital Twin Integration


Built with NitroStack

OmniMCP was developed and deployed using NitroStack, which simplified building an MCP server by providing the infrastructure for Tools, Resources, dependency injection, and deployment.

This allowed us to focus on solving the hardware integration problem while NitroStack handled the MCP server framework.

Learn more about NitroStack:

https://nitrostack.ai


Team

Team D4RK NULL

  • Abisher R Nair

  • Alwin Varghese

  • Gautham Sai

  • Gunisha Kaur


License

MIT License


⭐ If you found this project interesting, consider giving it a star!

Built with ❤️ for the NitroStack × Amrita University MCP Hackathon

OmniMCP — One Interface. Every Machine. Any AI.

Available Tools

5 tools
connect_deviceA

Connect to a specific hardware device by ID

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceIdYesThe unique identifier of the device to connect

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It only says 'connect' without explaining potential side effects (e.g., whether it establishes a persistent connection, what happens if already connected, or if any device state changes). This is a significant gap for a mutating action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, focused sentence that conveys the essential purpose. It contains no filler or redundant information, making it highly concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with one parameter, but there is no output schema and the description does not explain the return value or behavioral outcomes. It also lacks information about prerequisites or side effects. Given the context of sibling tools, the description gives the gist but is not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for the single parameter deviceId, which already explains it as 'The unique identifier of the device to connect'. The tool description adds 'by ID' but no additional semantic detail beyond what the schema provides. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Connect'), the resource ('a specific hardware device'), and the scope ('by ID'). It is easily distinguished from siblings like list_devices, disconnect_device, and device_status, which serve different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The verb 'connect' implies the intended use, but the description provides no explicit guidance on when to use this tool versus alternatives. It does not mention prerequisites (e.g., device must be listed), nor does it suggest using list_devices first or using execute_command after connecting. Usage is implied rather than clearly stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

device_statusA

Get connection and health status of a specific hardware device

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceIdYesThe unique identifier of the device

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. The verb 'Get' suggests a read-only operation, but it does not explicitly state safety, required permissions, or potential side effects. For a simple status-check tool, this is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One concise, front-loaded sentence that immediately states the action and target. No wasted words or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter status retrieval with no output schema, the description is mostly complete. It lacks detail on what 'health status' contains or the shape of the return value, but the core action and target are clear.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter deviceId already has a clear description in the schema. The tool description adds no extra meaning beyond 'specific hardware device', so it meets the baseline without adding value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Get' and clearly identifies the resource as 'connection and health status of a specific hardware device'. This distinguishes it from siblings like list_devices (lists all) and connect/disconnect_device (changes state).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly indicates the tool targets a specific device, implying you need a deviceId (obtained from list_devices). However, it does not explicitly state when not to use it or mention alternatives, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

disconnect_deviceA

Disconnect from a specific hardware device by ID

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceIdYesThe unique identifier of the device to disconnect

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It only restates the action without disclosing side effects, reversibility, authentication requirements, or what happens after disconnection. This is insufficient for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence with no wasted words. It clearly states the action and target.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with one parameter and no output schema, but it is a mutation action with no annotations. The description does not explain side effects, error conditions, or how disconnection affects device state, leaving room for ambiguity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (deviceId is well-described). The description adds no extra parameter semantics beyond what the schema already provides, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Disconnect') and resource ('hardware device') with a clear scope ('by ID'), distinctly differentiating it from siblings like connect_device and list_devices.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The context is clear: use this tool when you want to disconnect a specific hardware device. It doesn't explicitly mention alternatives or exclusions, but the sibling tools provide implicit context for when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

execute_commandB

Execute an action or command on a specific hardware device

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNoOptional parameter payload key-value pairs
commandYesThe command/action name to execute (e.g., "read_temp", "set_gpio", "capture_image")
deviceIdYesThe unique identifier of the device

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description bears full responsibility for behavioral disclosure. It only states 'execute an action or command' without revealing potential side effects, permission requirements, reversibility, or other critical behavioral traits. For a command execution tool, this is a substantial omission.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with zero redundancy. It communicates the core purpose immediately without wasted words, making it highly concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (arbitrary command execution with optional params), the lack of an output schema, and no annotations, the description is insufficient. It does not mention return values, error handling, safety considerations, or how the parameter payload should be used, leaving the agent without critical context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already covers all three parameters (deviceId, command, params) with descriptions, so the standalone description adds no extra semantic value. The baseline for full schema coverage is 3, and the description neither enhances nor contradicts parameter understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('execute') and clearly states the resource ('an action or command on a specific hardware device'). This distinctly separates it from sibling tools that list, connect, disconnect, or check device status, making the tool's primary function unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not provide any guidance on when to use this tool versus alternatives like connect_device or device_status. It lacks context about scenarios where command execution is appropriate, any prerequisites, or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_devicesA

List all registered hardware devices and their metadata

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden for behavioral disclosure. It states 'List all registered hardware devices and their metadata,' which adds only minimal context beyond the tool name. It does not explicitly mention that this is a safe, read-only operation, whether any permissions are required, or what 'metadata' includes. For a list tool, some disclosure of non-destructive behavior or scope would be expected.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that front-loads the verb 'List' and directly states the resource. Every word is necessary; there is no fluff or repetition. It is concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool is trivial (0 params, no output schema), the description suffices to convey the basic capability. However, it does not specify the return format or the exact metadata fields, which would be helpful since no output schema exists. It is minimal but not fully complete for a list tool, as it leaves 'metadata' undefined.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero properties (100% schema description coverage with no parameters). The description needs to add no parameter information, and the baseline for 0 params is 4. The description does not introduce any unnecessary parameter details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'List' with a clear resource ('all registered hardware devices') and mentions metadata, making the purpose unambiguous. It is clearly distinct from sibling tools like connect_device or device_status, which handle individual device actions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the word 'List' — an agent can infer it is the tool to enumerate devices. However, the description does not explicitly state when to choose this over sibling tools like device_status, nor does it mention any exclusions or prerequisites. The guidance is thus implicit rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updatesv1.0.0
    • First observedconnect_device
    • First observeddevice_status
    • First observeddisconnect_device
    • First observedexecute_command
    • First observedlist_devices

TDQS

A3.7/5.0

Scored across 5 tools

Disambiguation5/5

Each tool has a clear, unique purpose: listing, connecting, disconnecting, checking status, and executing commands. No two tools could be confused for one another.

Naming Consistency4/5

Most tools follow a verb_noun pattern (list_devices, connect_device, disconnect_device, execute_command), but device_status breaks the pattern by being noun_noun rather than get_status or similar. The inconsistency is minor and does not hinder readability.

Tool Count5/5

With five tools, the server is concise and well-scoped for hardware device management. Each tool earns its place, covering the essential operations without unnecessary bloat.

Completeness4/5

The surface covers listing, connecting, disconnecting, health status, and command execution, which are core for device management. Missing operations like updating device metadata or removing a device are not clearly required by the stated purpose, so the gap is minor.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    Not graded
    maintenance
    An MCP server that bridges the physical world and AI models by enabling natural language control of IoT hardware via the MQTT protocol. It supports real-time device monitoring, command publishing, and response handling for seamless integration between AI clients and physical devices.
    3
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables LLM agents to securely monitor and control MQTT devices for building automation, industrial control, and smart home systems through a standardized MCP interface.
    21
    MIT
  • F
    license
    B
    quality
    B
    maintenance
    Universal MCP server for industrial PLC communication, enabling AI agents to read sensors, alarms, status, setpoints, and write setpoints via adapters for Modbus, S7, or custom PLCs.
    6
    -