DecimerMCPServer
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., "@DecimerMCPServerConvert this chemical structure image to SMILES."
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.
DecimerMCPServer
mcp-name: io.github.DocMinus/decimer-mcp-server
MCP server that exposes DECIMER image-to-SMILES functionality as tool calls.
This project is a thin adapter over the existing FastAPI service in DecimerServerAPI.
It does not run DECIMER models directly.
The adapter sends JSON requests by default, with automatic fallback to form payloads for compatibility.
Tools
server_health: Checks whether the DECIMER FastAPI server is reachable.analyze_chemical_image: Sends a base64-encoded image to/image2smiles/and returns structured output.
Related MCP server: z_ai_vision_mcp_server_clone
Requirements
Python 3.10+
Running DECIMER API server (default:
http://localhost:8099)
find it at either of these two versions:
Install
cd /Users/a/dev/DecimerMCPServer
uv venv
uv syncConfiguration
Copy .env.example values into your environment:
DECIMER_API_BASE_URL(defaulthttp://localhost:8099)DECIMER_API_TIMEOUT_SECONDS(default60)DECIMER_MAX_IMAGE_BYTES(default10000000)DECIMER_MCP_LOG_LEVEL(defaultINFO)
Run (stdio transport)
uv run decimer-mcp-serveror
uv run python -m decimer_mcp_serverExample MCP client config
{
"mcpServers": {
"decimer": {
"command": "uv",
"args": ["run", "python", "-m", "decimer_mcp_server"],
"env": {
"DECIMER_API_BASE_URL": "http://localhost:8099"
}
}
}
}Output shape
analyze_chemical_image returns:
{
"ok": true,
"smiles": "CCO",
"reason": null,
"api_status_code": 200,
"api_message": null,
"classifier_score": 0.0000012,
"classifier_threshold": 0.3,
"classifier_decision": "structure_like"
}When no SMILES is returned by API classifier behavior:
{
"ok": true,
"smiles": null,
"reason": "not_chemical_structure",
"api_status_code": 200,
"api_message": "No SMILES returned by API",
"classifier_score": 0.99999,
"classifier_threshold": 0.3,
"classifier_decision": "not_structure_like"
}Development tests
uv sync --extra dev
uv run pytestMake targets:
make sync
make testSmoke test helper
Run one health check + one inference call against your DECIMER API:
cd /Users/a/dev/DecimerMCPServer
DECIMER_API_BASE_URL=http://chitchat:8099 uv run decimer-mcp-smoke-test --image /Users/a/dev/DecimerServerAPI/example_usage/structure.pngIf you keep settings in .env, load it with:
uv run --env-file .env decimer-mcp-smoke-test --image /Users/a/dev/DecimerServerAPI/example_usage/structure.pngor use make:
make smokeOverride the image path if needed:
make smoke SMOKE_IMAGE=/absolute/path/to/image.png
## MCP Registry publishing
Tags matching `v*` trigger `.github/workflows/publish-mcp.yml`.
Workflow steps:
- installs `mcp-publisher`
- validates `server.json`
- calls registry publish using secret `MCP_REGISTRY_TOKEN`
- publishes slug `io.github.DocMinus/decimer-mcp-server` (case sensitive; must match registry grant)
Before tagging:
1. Update `pyproject.toml` + `server.json` versions
2. Ensure `server.json` stays valid (`uv pip install jsonschema && python validate snippet from AGENTS.md`)
3. Add GitHub repo secret `MCP_REGISTRY_TOKEN` (GitHub PAT with `repo`, `workflow` scopes)
Release flow:
```bash
git tag v0.1.1
git push origin v0.1.1Monitor Actions tab. If publish fails, rerun using workflow dispatch after fixing issues.
## Contribution
This project was built by DocMinus with AI-assisted coding support (OpenCode/Copilot-style tooling), then reviewed and tested by the author.
## AI usage policy
- AI assistance was used for scaffolding, implementation drafts, and documentation edits.
- Final technical decisions, validation runs, and acceptance were performed by the maintainer.
- Runtime behavior should be validated with local tests (`make test`) and smoke tests (`make smoke`) before release.Available Tools
2 toolsanalyze_chemical_imageC
Analyze a base64 image and return a predicted SMILES string when available.
| Name | Required | Description | Default |
|---|---|---|---|
| encoded_image | Yes | ||
| is_hand_drawn | No | ||
| classify_image | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description must disclose behavioral traits. It only says 'return a predicted SMILES string when available', leaving unclear what happens if analysis fails, if image is invalid, or if result is unavailable. No mention of authentication, rate limits, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence, front-loading the core purpose. However, it is too short to cover necessary details, making it more under-specified than truly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 3 parameters, no output schema, and no annotations, the description is incomplete. It lacks details on return values, parameter behavior, error handling, and output format. The lone sibling tool does not aid context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description should compensate. It does not explain any of the three parameters (encoded_image, is_hand_drawn, classify_image) beyond their names. The agent gets no additional meaning about role or usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool analyzes a base64 image and returns a predicted SMILES string. The verb 'analyze' and resource 'base64 image' are specific, and the output type is named. However, 'when available' is ambiguous, slightly reducing clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs. alternatives is provided. There is only one sibling tool (server_health), but the description does not help the agent decide between them or mention any prerequisites or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
server_healthA
Check DECIMER FastAPI server availability.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states 'check availability' without describing return format, error behavior, or network consequences. This is insufficient for an agent to understand the tool's full behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is front-loaded and directly conveys the purpose. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no parameters and no output schema. For a simple health check, the description is arguably sufficient but lacks details on the response format (e.g., boolean, status code). Completeness is adequate but not exceptional.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so schema coverage is trivially 100%. The description does not need to add parameter information. Baseline score of 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does: 'Check DECIMER FastAPI server availability.' It uses a specific verb ('Check') and a resource ('server availability'), and it distinguishes itself from the sibling tool 'analyze_chemical_image'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidelines on when to use this tool versus alternatives. However, the tool's purpose (check server availability) is distinct from the sibling, making usage implicit. A score of 3 is appropriate as there is no guidance but context provides some clarity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
The two tools have clearly distinct purposes: one analyzes chemical images, the other checks server health. There is no overlap or ambiguity.
Both tools follow a consistent verb_noun pattern with snake_case (analyze_chemical_image, server_health), making naming predictable.
With only 2 tools, the server feels minimal but is not unreasonable for a specialized chemical image analysis service. However, it is on the thin side, just above the threshold for a single trivial tool.
The server covers its core operation (analyze image) but lacks additional tools for batch processing, history, or configuration, leaving minor gaps in coverage for a more comprehensive workflow.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server for progressive tool usage at any scale (see https://klavis.ai)
Remote MCP server exposing SMI Aware tools, resources, and skills over Streamable HTTP.
Focused MCP server for OpenAI image/audio generation (v2.0.0). Wraps endpoints via HAPI CLI.
MCP server that lets AI assistants use all OneSchema features exposed via the public API.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceMCP server for Ketcher chemical structure editor integration, enabling SMILES/MOL/InChI conversion, image generation, molecular property calculation, and validation.MIT
- FlicenseBqualityBmaintenanceOpenAI-compatible MCP server for running image analysis tools against your own vision model endpoint.716
- FlicenseNot gradedqualityCmaintenanceRemote MCP server that exposes a generate_image tool allowing Claude to generate images via the Google Gemini API.
- AlicenseAqualityCmaintenanceMCP server that provides the describe_image tool, enabling AI clients to analyze local images by forwarding them to any OpenAI-compatible vision endpoint and returning a text description.1MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/DocMinus/DecimerMCPServer'
If you have feedback or need assistance with the MCP directory API, please join our Discord server