IRIS MCP Blueprint
Provides tools for managing InterSystems IRIS databases, including executing SQL queries, browsing globals, calling class methods, searching code via Atelier API, and driving Interoperability productions.
Click on "Install 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., "@IRIS MCP BlueprintQuery the Sample.Person table for the first 5 rows."
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.
IRIS MCP Blueprint
⚠️ This repository is an example, not a finished product. It's a blueprint showing how to build an MCP server for InterSystems IRIS that performs operations across several tool categories: SQL, Globals, Class methods, Atelier API, and Interoperability (see
src/iris_mcp_blueprint/tools/), plus a handful of reusable prompts and resources. It is not meant to be a one-size-fits-all MCP server for every IRIS workload. Use it as a starting point: clone it, keep what you need, drop what you don't, and adapt the tools, prompts, and resources to your own IRIS application (namespaces, classes, productions, security model, business rules, and so on). The ObjectScript demo undersrc/MCPTest/is only there to give the included tools/prompts something to work against.
A FastMCP server that exposes tools, prompts, and resources to work with InterSystems IRIS with any MCP-compatible client (Cursor, Claude Desktop, and others). The Python package under src/iris_mcp_blueprint/ connects to IRIS over the Native SDK and wraps the operations you tend to repeat by hand — running SQL, poking at globals, searching code through the Atelier API, driving an Interoperability production, calling class methods, and so on. The ObjectScript classes in src/MCPTest/ (including MCPTest.BP.QueryService) are there as a concrete target so the tools and the guided prompts have something realistic to operate on.
Prerequisites
Tool | Why it’s needed | Source / version pin in this repo |
Python 3.12 | Runtime that satisfies |
|
uv ≥ 0.5 | Installs deps from | Versions older than 0.5 may not understand the lockfile or |
Docker with | Runs the IRIS database container described by | Image: |
Git | Cloning this repo (and any | — |
MCP-compatible client (at runtime) | Drives the prompts and tools | Cursor, Claude Desktop, or anything that speaks MCP over stdio / SSE |
Notes:
You don’t need to install Python yourself —
uvwill fetch the 3.12 interpreter pinned in.python-versionif it’s not already on your system.The Docker container exposes IRIS on host ports 9091 (SuperServer) and 9092 (Web / Management Portal). Make sure those ports are free.
Install uv if you don't have it (via pip):
pip install uvRelated MCP server: iris-execute-mcp
Quick start
Order matters here. The MCP server opens its IRIS connection at startup, and if IRIS isn't reachable yet every IRIS-backed tool will fail with a connection error. Stick to this order:
clone the repo
start the IRIS Docker container
set the IRIS env vars in your MCP client config
start (or restart) the MCP server from the client.
1. Clone the repo
git clone https://github.com/pietrodileo/iris-mcp-blueprint.git
cd iris-mcp-blueprintYou can perform an optional smoke-check to ensure the MCP server starts at all (this also bootstraps .venv/ from pyproject.toml + uv.lock on first run):
uv sync
uv run iris-mcp-blueprint --helpThis command is only a sanity check — it prints the CLI options and exits. You will not drive the server from the terminal; real usage happens through an MCP-compatible client such as Cursor or Claude Desktop, which spawns the server itself using the JSON config in steps 3–4.
Running
uv syncfirst is optional: it just pre-creates the venv (handy to surface install errors or to avoid MCP client startup timeouts).
2. Start the IRIS database (do this before launching the MCP server)
docker compose up -dThis starts IRIS with the SuperServer on port 9091 and the Management Portal on port 9092 (http://localhost:9092/csp/sys/UtilHome.csp). Wait until the container reports healthy (docker ps) before moving on — the MCP server cannot open a Native SDK connection until IRIS is accepting traffic on port 9091.
3. Set the IRIS connection env vars in your MCP client
Open your client's MCP config (.cursor/mcp.json, Claude Desktop's claude_desktop_config.json, etc.) and fill in the env block with the values listed in IRIS connection environment variables. Concrete JSON snippets for both clients are in Configure Cursor or Claude Desktop. Skipping or mistyping these values is the most common cause of Connection refused / Login failed errors at MCP startup.
4. Start (or restart) the MCP server from the client
Launch the server from the MCP client so it picks up the env block. In Cursor that means enabling/refreshing iris-mcp-blueprint in the MCP panel; in Claude Desktop, restart the app after editing the config. The first call goes through uv run iris-mcp-blueprint and provisions the venv on demand. If you started the server before IRIS was up, restart it now — connections are established at startup and not retried implicitly.
MCP prompts and how to try them
Prompts are short, reusable workflow instructions returned by @mcp.prompt handlers in src/iris_mcp_blueprint/prompts/prompts.py. They don't run code on their own — they just tell the assistant which tools to call and in what order (for example get_class_source, then add_production_item, then run_class_method).
Available prompts (quick reference)
Prompt name | Purpose (summary) |
| Inspect a table’s structure, sample rows, and suggest indexes. |
| Read a class with |
| Safe CSV import: validate name, call |
| Export an existing table to JSON, CSV, or TXT via the |
| Search class sources with |
| Map a persistent class / table to globals and explain how data is stored. |
| Wire a Business Process to HTTP: production items ( |
What each prompt does (more detail)
Each entry below is collapsed by default — click to see arguments and the steps the prompt walks the assistant through.
Arguments:
table_name(required);schema_name(optional — if empty the workflow asks you to pick a schema, defaulting toSQLUser).What it does: drives
res_tables_all(when the schema is unknown),describe_tablefor columns and types,fetch_datafor a small sample (first five rows), and finally writes a recommendation for indexes that would help typical access patterns.
Arguments:
query= full class name (for exampleMCPTest.BP.QueryService).What it does: calls
get_class_source, then summarizes InstanceMethods / ClassMethods, properties, and — when present — the<Storage>block and related globals.Use it when: you need a readable overview before editing or documenting code. Several other prompts chain into
explore-classfor deeper analysis.
Arguments:
table_name; acsv_samplestring (headers plus a few rows are enough); optionaltable_schema.What it does: infers types from the sample, checks whether the target already exists via
res_tables_all, refuses to overwrite blindly, then callsimport_csv_to_iris. After load it usesdescribe_tableandfetch_data(for exampleSELECT COUNT(*)) to verify shape and row counts, and may suggestcreate_indexonce you agree on names.Try it with the bundled sample: paste the first few lines of
example_data/patients.csv(header + a handful of rows) intocsv_sample, settable_nameto a fresh name such asPatients, and optionallytable_schematoMCPTest(or any schema you like). The workflow will create the table and load all rows.
Arguments:
table_name(required);format=json(default),csv, ortxt; optionaltable_schema(the workflow asks if empty, defaulting toSQLUser).What it does:
Resolves the schema (via
res_tables_all/get_tablesiftable_schemais empty).Calls
describe_tableto show the user the columns and types that will be exported.Runs
SELECT COUNT(*)viafetch_dataand warns if the table is large (>~10 000 rows).Asks the user whether to export everything (
limit=0), apply aWHEREfilter, restrict to a subset ofcolumns, or keep the defaultlimit=1000.Calls the
export_tabletool with the agreed scope and chosen format.Previews the first few lines/items and reports the total length, then explains how to save the output (e.g.
<table_name>.<format>).
Tool details (
export_table):format—'json'returns a list of objects (nullfor SQLNULL,Decimalanddatetimeserialized as strings);'csv'follows RFC 4180 with a comma delimiter and CRLF line terminator;'txt'reuses the pipe-separated table layout shared with the other SQL tools.columns— optional list of column names. Each is validated as a SQL identifier ([A-Za-z_][A-Za-z0-9_]*) before being inlined.where— optional SQL fragment without the leadingWHEREkeyword (e.g.Age > 30 AND City = 'Rome'). Caller is responsible for escaping; for untrusted input usefetch_datawith parameters instead.limit— defaults to1000. Pass0(or a negative value) to disable the cap. Implemented as IRISSELECT TOP N, so it streams only the requested rows.
Try it with the demo data: after
MCPTest.Employer.PopulateAndAssign()has run (auto-seeded byiris.scripton first start, or invoked viarun_class_method), call the prompt withtable_name:Employer,table_schema:MCPTest,format:json(orcsv/txt).
Arguments:
query= any text to find in class sources (API name, method name, ObjectScript fragment).Steps:
search_code→ list of matching classes → you choose which hits matter → those classes are studied further (the prompt text tells the model to reuseexplore-class) → short explanation of how the string appears in each chosen class.Use it for: refactors, security reviews, or learning how a pattern is used in your application.
Arguments:
table_name; optionaltable_schema. The class is treated as{table_schema}.{table_name}when that matches your persistent package.What it does: locates every distinct global and explains its role (data vs index vs stream) and may call
check_global/check_global_contentorfetch_datato verify their content.Use it when: you care about physical layout, not only column names.
Arguments:
bp_class(for exampleMCPTest.BP.QueryService); optionalbp_config_name,bs_config_name,web_app_path,production_name.What it does:
Verifies
OnRequest/EnsLib.HTTP.GenericMessageon the BP.Ensures an active production exists.
Calls
add_production_itemfor the BP and for the REST BS (withTargetConfigNames).Calls
register_web_application, thenupdate_production, with optionallist_production_items.For
MCPTest.BP.QueryService, runsMCPTest.Employer:PopulateAndAssignviarun_class_methodto seed demo data.Applies the BS setting tweaks listed in the prompt.
Documents the URL pattern
http://<host>:<webport><web_app_path>/<bs_config_name>and runs an HTTP smoke test.
After running it: validate with the curl examples in How to test them (Cursor and similar clients).
How to test them (Cursor and similar clients)
Start IRIS (
docker compose up -d) and configure the MCP server using Environment variables (IRIS connection) and the JSON example under Option A — Local later in this README so the client can reach IRIS (IRIS_PORT,IRIS_NAMESPACE, credentials, etc.).In the client, open the MCP prompts UI for
iris-mcp-blueprint(wording varies: “Prompts”, slash command, or the model picker’s MCP prompt list).Select a prompt by name (e.g.
explore-class) and pass the parameters the prompt expects (e.g. class nameMCPTest.BP.QueryService).Send the message and confirm the assistant follows the steps: it should call the listed tools and report results. If a step returns
ERROR:, fix IRIS connectivity or inputs and retry.
Example inputs and full QueryService test (after IRIS is up and MCP is configured):
explore-class—query:MCPTest.EmployerorMCPTest.BP.QueryService.analyze-table—table_name:Employer,schema_name:MCPTest(or your SQL schema; leave empty to exercise schema discovery).search-for-code—query:PopulateAndAssignorEnsLib.REST.GenericService.analyze-table-globals-content— same table/schema asanalyze-table, for exampleEmployer/MCPTest.import-csv-workflow— paste the first few lines ofexample_data/patients.csvintocsv_sample, withtable_name:Patientsand an unused schema such asMCPTest. (You can also use any small fictional CSV and a newtable_namethat does not already exist.)export-table—table_name:Employer,table_schema:MCPTest,format:json(orcsv/txt). The prompt previews the data and the underlyingexport_tabletool returns the full payload as a single string ready to copy intoEmployer.json/Employer.csv/Employer.txt.create-rest-bp-endpoint—bp_class:MCPTest.BP.QueryService; leave other fields empty to accept the defaults the prompt proposes, or set them to match your existing production. With this repo'sdocker compose, the web port is mapped to 9092 on the host; a typical run of the prompt registers a CSP/REST web application under/rest/user/...and a production itemQueryService-REST-BS(EnsLib.REST.GenericService) that forwards to theQueryServicebusiness process. Before calling it, ensure demo data exists by invoking therun_class_methodtool withclass_name:MCPTest.Employer,method_name:PopulateAndAssign,args:[](or rely oniris.script, which populates only when the table is still empty after import). Then validate the endpoint from a shell (-iprints response headers; on macOS/Linux usecurlinstead ofcurl.exe):# Employees for one employer (employer-id is required for this mode) curl.exe -sS -i "http://localhost:9092/rest/user/queryservice-rest-bs/QueryService-REST-BS" -H "service: employees" -H "employer-id: 1" # All employers curl.exe -sS -i "http://localhost:9092/rest/user/queryservice-rest-bs/QueryService-REST-BS" -H "service: employers"Expected:
HTTP/1.1 200 OKandContent-Type: application/json. Theserviceheader is matched case-insensitively;employee(singular) is accepted as an alias foremployees. If your web path or business service Name in production differs, replace the URL segment after/rest/user/and the final path segment (QueryService-REST-BS) accordingly.
Configuration
This section picks up where the Quick start left off: bootstrapping a brand-new MCP server from this layout, wiring the server into Cursor and Claude Desktop, and (optionally) publishing to PyPI so others can install it with uvx.
Project layout
iris-mcp-blueprint/
├── pyproject.toml # Package metadata + 3 runtime deps + CLI entry-point
├── uv.lock # Pinned transitive versions (committed)
├── docker-compose.yml # IRIS Community container (web 9092, super 9091)
├── Dockerfile / iris.script # Class import + optional demo data on first start
├── example_data/ # Sample CSV (e.g. patients.csv) for prompts
├── src/
│ ├── iris_mcp_blueprint/ # Python MCP server
│ │ ├── mcp_app.py # FastMCP instance + IRIS connection lifespan
│ │ ├── entrypoint.py # CLI entry-point (stdio / SSE transport)
│ │ ├── tools/ # @mcp.tool handlers (SQL, globals, Atelier, interop, …)
│ │ ├── prompts/ # @mcp.prompt handlers (workflows)
│ │ └── resources/ # @mcp.resource handlers (read-only data)
│ └── MCPTest/ # ObjectScript demo classes (Employer, BP/QueryService, …)
└── README.mdOnly three runtime dependencies are pinned in pyproject.toml (fastmcp, intersystems-irispython, requests); the rest of the transitive graph lives in uv.lock. There's no requirements.txt.
Initialize a new MCP project
The easiest route is to clone this repo as a template and rename the package, but you can also bootstrap from scratch with uv. Either way, the pieces are always the same: a pyproject.toml script entry, a FastMCP mcp_app, and one or more @mcp.tool / @mcp.prompt / @mcp.resource handlers.
Clone, then rename the package directory
src/iris_mcp_blueprint/and update the imports / entry point that reference it.In
pyproject.toml, changename,description,authors, and the[project.scripts]line so the CLI command and entry-point match the new package (my-mcp = "my_mcp.entrypoint:main").Adjust IRIS-specific defaults in
mcp_app.pyif your server should default to a different host/port/namespace.Add or remove handlers under
tools/,prompts/,resources/. Each new module must be imported fromentrypoint.py(or wherevermcp_app.run()is invoked) so the decorators register before the server starts.Run
uv synconce to refresh the lockfile, thenuv run my-mcp --helpto smoke-test the new CLI name.
uv init --package my-mcp # creates pyproject.toml, src/my_mcp/, etc.
cd my-mcp
uv add fastmcp intersystems-irispython requestsThen, in src/my_mcp/mcp_app.py:
from fastmcp import FastMCP
mcp = FastMCP("my-mcp")Add a tool in src/my_mcp/tools/echo.py:
from my_mcp.mcp_app import mcp
@mcp.tool()
def echo(message: str) -> str:
"""Return the message unchanged."""
return messageAdd an entry point in src/my_mcp/entrypoint.py:
from my_mcp.mcp_app import mcp
def main() -> None:
mcp.run()Wire it up in pyproject.toml:
[project.scripts]
my-mcp = "my_mcp.entrypoint:main"Then uv run my-mcp launches the server over stdio.
IRIS connection environment variables
The server reads these at startup with os.getenv(). Set them wherever you launch the server from (shell, mcp.json env block, Docker environment, CI secrets store). Note that there's no automatic .env file loading.
Variable | Default | Description |
|
| IRIS host |
|
| SuperServer TCP port ( |
|
| Management Portal / REST APIs port ( |
|
| IRIS namespace |
|
| IRIS username |
|
| IRIS password |
For SSE / HTTP transport you can also set MCP_TRANSPORT, FASTMCP_HOST, and FASTMCP_PORT (see Run the server from the terminal below).
Run the server from the terminal
The server supports two transports. Pick the one that matches how the MCP client will reach it:
Transport | When to use it | How the client connects |
| The MCP client (Cursor, Claude Desktop, …) lives on the same machine and can spawn the server as a subprocess. This is what every example earlier in this README uses. | Client launches the |
| The client is on a different machine, in a sandbox, or otherwise can't spawn subprocesses. The server runs as a long-lived HTTP service and the client connects to a URL. |
|
stdio (default — what Cursor / Claude Desktop normally use)
You usually do not start stdio mode by hand — your MCP client launches it for you using the JSON config in Configure Cursor or Claude Desktop. The same command works in a terminal if you want to verify it manually:
uv run iris-mcp-blueprintThe process now waits for an MCP client on stdin. Press Ctrl+C to stop. There is nothing to "open" in a browser; this transport is meant for a parent process.
sse (remote / HTTP)
Use this when the client cannot spawn the server itself — for example a remote IDE, a hosted assistant, or you want several users to share one server instance.
Start the server explicitly in SSE mode and bind it to an interface and port reachable by the client.
0.0.0.0listens on all network interfaces;127.0.0.1is loopback-only.uv run iris-mcp-blueprint --transport sse --host 0.0.0.0 --port 8000Equivalent using environment variables (handy in
docker run,systemdunits, etc.):MCP_TRANSPORT=sse FASTMCP_HOST=0.0.0.0 FASTMCP_PORT=8000 uv run iris-mcp-blueprintDefaults if you omit them:
--transport stdio,--host 127.0.0.1,--port 8000(these are also the values returned when--helpis invoked).Make sure firewalls / Docker / cloud security groups allow inbound traffic to that port from the client.
Point the client at the SSE endpoint. Replace
<host>with the address that is reachable from the client (localhostif it's the same machine, otherwise the public/LAN IP or DNS name); the path is always/sse:http://<host>:8000/sseIn Cursor, that goes in Settings → MCP → Add server (SSE / URL). In Claude Desktop, use a JSON entry such as:
{ "mcpServers": { "iris-mcp-blueprint": { "url": "http://<host>:8000/sse", "env": { "IRIS_HOSTNAME": "localhost", "IRIS_PORT": "9091", "IRIS_WEB_PORT": "9092", "IRIS_NAMESPACE": "USER", "IRIS_USERNAME": "_SYSTEM", "IRIS_PASSWORD": "SYS" } } } }Quick smoke-test from any host that can reach the URL — the SSE endpoint should keep the connection open and stream events (you'll see
event:/data:lines):curl -N http://<host>:8000/sse
Security note: SSE mode does not add authentication on top — anyone who can reach the URL can call the tools (and therefore your IRIS instance). Bind to
127.0.0.1, put a reverse proxy in front, or run it inside a private network.
Configure Cursor or Claude Desktop
There are two distribution modes for any MCP client config: local (uv run against a clone you maintain locally) and remote (uvx pulling the package from GitHub or PyPI on demand). Pick one per server — they're not meant to be combined.
Local ( | Remote ( | |
Requires cloning the repo | Yes | No |
Reads | Local disk | GitHub / PyPI |
Builds a wheel | No (editable source) | Yes (temporary, invisible) |
Changes to | Reflected immediately | Require a new commit + push (or republish) |
Best for | Development | Sharing / distribution |
1. Local: uv run against a cloned MCP
Clone this GitHub repository on a local folder and run the Docker container.
Cursor — create or edit .cursor/mcp.json in the repo root. Cursor uses the workspace folder as the MCP server's working directory, so a plain uv command works without any extra path:
{
"mcpServers": {
"iris-mcp-blueprint": {
"command": "uv",
"args": ["run", "iris-mcp-blueprint"],
"env": {
"IRIS_HOSTNAME": "localhost",
"IRIS_PORT": "9091",
"IRIS_WEB_PORT": "9092",
"IRIS_NAMESPACE": "USER",
"IRIS_USERNAME": "_SYSTEM",
"IRIS_PASSWORD": "SYS"
}
}
}
}Other top-level keys you may already have in the .json file can stay alongside mcpServers.
Claude Desktop — Claude Desktop does not inherit a workspace folder, and on Windows the uv executable is often outside of Claude's PATH. To make a local launch reliable you usually have to:
Point
commandat the absolute path touv.exe(or to theuvbinary on macOS / Linux).Pass
--directory <repo-root>touvso it findspyproject.toml.
Config file locations:
Windows:
%APPDATA%\Claude\claude_desktop_config.jsonmacOS:
~/Library/Application Support/Claude/claude_desktop_config.json
Replace the two absolute paths with yours.
{
"mcpServers": {
"iris-mcp-blueprint": {
"command": "C:\\Users\\<you>\\.local\\bin\\uv.exe",
"args": [
"--directory",
"C:\\path\\to\\iris-mcp-blueprint",
"run",
"iris-mcp-blueprint"
],
"env": {
"IRIS_HOSTNAME": "localhost",
"IRIS_PORT": "9091",
"IRIS_WEB_PORT": "9092",
"IRIS_NAMESPACE": "USER",
"IRIS_USERNAME": "_SYSTEM",
"IRIS_PASSWORD": "SYS"
}
}
}
}Find your own uv.exe location with where uv in Windows Terminal (typically C:\Users\<you>\.local\bin\uv.exe after pip install uv).
On macOS / Linux a similar shape works. Just adjust the uv path and use a forward-slash repo path.
After editing the JSON, fully quit Claude Desktop from the system tray (closing the window is not enough) and relaunch. Cursor only needs the MCP server reload icon.
2. Remote: uvx from GitHub or PyPI
uvx downloads the package, builds it in a temporary isolated environment, and runs it — no clone, no uv sync, no manual venv. The user only needs uv installed.
Adjust IRIS_* for your environment.
Cursor — .cursor/mcp.json (uses just uvx; Cursor inherits PATH so this works on Windows, macOS, and Linux):
{
"mcpServers": {
"iris-mcp-blueprint": {
"command": "uvx",
"args": [
"--from", "git+https://github.com/pietrodileo/iris-mcp-blueprint.git",
"iris-mcp-blueprint"
],
"env": {
"IRIS_HOSTNAME": "localhost",
"IRIS_PORT": "9091",
"IRIS_WEB_PORT": "9092",
"IRIS_NAMESPACE": "USER",
"IRIS_USERNAME": "_SYSTEM",
"IRIS_PASSWORD": "SYS"
}
}
}
}Claude Desktop on Windows — claude_desktop_config.json (use the absolute path to uvx.exe):
{
"mcpServers": {
"iris-mcp-blueprint": {
"command": "C:\\Users\\p.dileo\\.local\\bin\\uvx.exe",
"args": [
"--from", "git+https://github.com/pietrodileo/iris-mcp-blueprint.git",
"iris-mcp-blueprint"
],
"env": {
"IRIS_HOSTNAME": "localhost",
"IRIS_PORT": "9091",
"IRIS_WEB_PORT": "9092",
"IRIS_NAMESPACE": "USER",
"IRIS_USERNAME": "_SYSTEM",
"IRIS_PASSWORD": "SYS"
}
}
}
}You can wire it into any client mcp.json using uvx and calling directly package name iris-mcp-blueprint:
{
"mcpServers": {
"iris-mcp-blueprint": {
"command": "uvx",
"args": ["iris-mcp-blueprint"],
"env": { "IRIS_HOSTNAME": "...", "IRIS_PORT": "1972" }
}
}
}Publish to PyPI
Once the project is ready to share, build a wheel and upload it to PyPI so anyone with uv installed can run it via uvx iris-mcp-blueprint without cloning the repo first.
Bump the version. PyPI rejects re-uploads of an existing version, so every release needs a new number. Use
uv versionto updatepyproject.toml(anduv.lock) in one step:uv version --bump patch # 0.1.0 -> 0.1.1 uv version --bump minor # 0.1.0 -> 0.2.0 uv version --bump major # 0.1.0 -> 1.0.0 uv version 1.2.3 # set an explicit version uv version # just print the current versionBuild distributable artifacts:
uv build # writes sdist + wheel into dist/Get a PyPI token. Log in to PyPI and create an API token (project-scoped is recommended once the project exists; otherwise use an account-wide token for the first upload). The token always starts with
pypi-.Publish with the token. Export the token as
UV_PUBLISH_TOKENso it does not end up in your shell history;uv publishreads it automatically:# Linux / macOS / Git Bash export UV_PUBLISH_TOKEN=pypi-<your-token> uv publish # PowerShell $env:UV_PUBLISH_TOKEN = "pypi-<your-token>" uv publishVerify the public install (uses the freshly uploaded version, no
gitneeded):uvx iris-mcp-blueprint --help
After a successful upload, switch any client mcp.json from the GitHub form to the simpler PyPI form shown above.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/pietrodileo/iris-mcp-blueprint'
If you have feedback or need assistance with the MCP directory API, please join our Discord server