indicus-ai-mcp-tools
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@indicus-ai-mcp-toolsShow open SOC alerts and their severity."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
indicus-ai-mcp-tools
Demo services for the IndicusAI platform, served two ways at once:
REST, at
/soc,/utility,/payer,/iam— registered as built-in custom HTTP tools, one tool per endpointMCP, at
/mcp— one connector carrying every tool on the server
Both surfaces call the same functions over the same fixtures. That is the point: a demo comparing built-in tools against MCP proves nothing if the two run on different data, because any difference could be blamed on the data.
Run it
python3 -m venv .venv && .venv/bin/pip install -e .
.venv/bin/uvicorn mcp_server:app --port 8304
curl -s localhost:8304/health | python3 -m json.toolOr docker compose up -d, which joins the platform's network so the platform
reaches it as http://mcp-tools:8304.
Related MCP server: Http-tools Universal MCP Server
Adding a tool
One edit:
@app.get("/widgets/{widget_id}", operation_id="getWidget",
summary="Fetch one widget")
def get_widget(widget_id: str) -> dict:
"""What the model reads to decide whether to call this."""
...It is now a REST endpoint and an MCP tool called soc_getWidget. Nothing
else to register — mcp_server walks the routes and every one carrying an
operation_id becomes a tool. A route without one is skipped, which is how the
audio download stays out of the tool list.
Three things the wrapper handles, each learned by hitting it:
Names are
{service}_{operationId}. MCP names are flat across a server while operation_ids are unique only per service. SOC and IAM both definegetIdentity; unprefixed, the second silently replaced the first and an agent asking for a SOC identity got IAM's answer.HTTPExceptionbecomes a value, not a protocol error. Over REST a 404 is the response; over MCP there are no status codes, so an uncaught one reads as a broken server.{"error": "No alert ALT-9999.", "status": 404}is a fact the model can act on.Annotations are resolved eagerly.
from __future__ import annotationsmakes them strings, which pydantic resolves through the handler's own module globals — not something a wrapper can inherit.
A new service
Write the FastAPI app in services/, then add it to SERVICES in
mcp_server.py. That is the whole procedure.
Onboarding these tools into IndicusAI
What a tool is on that platform, the three ways one gets there, and how to build both demos' agents and pipelines in the UI: demo-data-setup.md, in the platform repository — that side of it is all IndicusAI, and this repository only supplies the endpoints.
Testing the DISCOM agents
discom-agent-tests.md, in the platform repository — the walkthrough is done in that UI, and sits with the other platform documents. It takes all ten through the browser one input at a time, with what a correct answer contains and the wrong answer each case is designed to catch.
The expected figures in it come from services/discom_data.py here, so a
change to a fixture means a change to that document.
Seeding a demo
seeds/ builds the workspace, skills, agents and pipeline in the platform.
They log in as demo@example.com, so scripts/seed.py in the platform repo
runs first.
On a deployment, run them inside the container — it already has the code and its dependencies, and the compose file sets both hostnames:
docker compose exec mcp-tools python seeds/soc.py
docker compose exec mcp-tools python seeds/utility.pyOn a laptop, where the platform and these services are both on localhost:
.venv/bin/python seeds/soc.py
.venv/bin/python seeds/utility.pyTwo hostnames decide where a seed points, and both default to 127.0.0.1,
which is correct only on a laptop — inside a container it is the container:
PLATFORM_API_URL— the platform being seeded,http://api:8000/api/v1over the compose networkDEMO_HOST— what goes into the registered tool URLs and theirallowed_hostspin,mcp-toolsover the compose network
The recordings
services/generate_visit_recordings.py uses macOS say and cannot run on
Linux. Generate on a Mac, copy data/recordings/ to the deployment. data/
is gitignored — the fixtures are derived, not source.
Only the utility demo needs them, and only to run a visit end to end; seeding works without.
This server cannot be deployed
Maintenance
Related MCP Connectors
Hosted MCP endpoint with realistic fake data for prototyping agents. 12 tools, no setup.
Zero-setup MCP gateway securely connecting AI to your tools with authentication and workflows
Hosted MCP server exposing US hospital procedure cost data to AI assistants
Pay-per-use tool marketplace for AI agents. Search, price-check, and call APIs via MCP.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceTurns any OpenAPI/Swagger API into MCP tools, enabling AI assistants to call REST API endpoints directly.2MIT
- AlicenseNot gradedqualityDmaintenanceProvides a standardized MCP interface for interacting with HTTP tools and services, enabling unified API access and management.MIT
- FlicenseNot gradedqualityDmaintenanceConverts any REST API endpoints into MCP tools, enabling AI clients like Cursor and Claude Desktop to call internal services directly.-
- FlicenseNot gradedqualityDmaintenanceEnables LLM-powered agents to securely communicate with and orchestrate downstream microservices via FastAPI endpoints exposed as MCP tools.-