Skip to content

Migrate ChronoLog MCP server in-tree (#647, migration only)#665

Merged
iameneko merged 13 commits into
developfrom
feature/647-mcp-migration
May 26, 2026
Merged

Migrate ChronoLog MCP server in-tree (#647, migration only)#665
iameneko merged 13 commits into
developfrom
feature/647-mcp-migration

Conversation

@iameneko
Copy link
Copy Markdown
Contributor

@iameneko iameneko commented May 26, 2026

Migration half of #647. Brings the MCP server in-tree at plugins/chrono-mcp/, imported from iowarp/clio-kit via git subtree split so the original authored commits are preserved (no submodule).

No improvements yet — the imported code still targets an older client API and won't run against current develop as-is. Follow-up tracked in #666.

akougkas and others added 11 commits February 8, 2026 20:20
…onfigure toolkit.iowarp.ai

- Rename directories: agent-toolkit-{mcp-servers,mcp-clients,ai-devkit,website} -> clio-kit-*
- Rename Python package: agent_toolkit -> clio_kit
- Replace all references: iowarp-agent-toolkit -> clio-kit, Agent Toolkit -> CLIO Kit
- Migrate URLs: iowarp.github.io/clio-kit -> toolkit.iowarp.ai
- Unify all package versions to 1.0.0
- Update GitHub Actions workflows with new directory paths
- Update website hero, baseUrl, custom domain (CNAME)
- Fix image paths and internal links for new baseUrl
- Regenerate all uv.lock files
Phase 1 - CI/CD fixes and bug squashing:
- Fix .codecov.yml paths (agent-toolkit -> clio-kit) and add missing flags
- Remove continue-on-error from quality_control.yml for ruff/test/security
- Delete redundant test-mcps.yml workflow
- Fix docs-and-website.yml branch target (dev -> main)
- Fix pandas: add missing hypothesis_testing import
- Fix jarvis: remove dead mcp.run(transport="sse") call
- Fix compression: add decompress_file tool

Phase 2 - Structural standardization:
- Standardize all FastMCP() names to kebab-case matching directory
- Convert 12 flat-layout servers to proper src/{name}_mcp/ packages
- Standardize build backend to hatchling across all servers
- Standardize transport to stdio/http with argparse + env var fallback

Phase 3 - FastMCP 3.0 upgrade (all 16 servers):
- Bump fastmcp dependency to >=3.0.0rc2
- Add instructions= to all FastMCP() constructors
- Add annotations= (readOnlyHint, destructiveHint, idempotentHint) to all tools
- Add tags= to all tools for categorization
- Replace ad-hoc error dicts with raise ToolError() from fastmcp.exceptions
- Add @mcp.resource() (at least 1 per server)
- Add @mcp.prompt() with Message from fastmcp.prompts (at least 1 per server)
- Trim verbose tool descriptions to 1-2 sentences
- Use Annotated[type, Field(description=...)] for parameter docs
- Add list_page_size=10 for servers with 10+ tools
- Update all tests for v3 API (no more FunctionTool/.fn() patterns)
…ini CLI

Add server.json (MCP registry), .claude-plugin/plugin.json and .mcp.json
(Claude Code marketplace), gemini-extension.json (Gemini CLI extension),
and claude_desktop_config.json (Claude Desktop reference config) for all
16 MCP servers.

- New generate_server_json.py script extracts live FastMCP metadata and
  produces all manifest files in one pass
- Update publish.yml with MCP registry (mcp-publisher) and Smithery jobs
- Update quality_control.yml with server.json validation job
- Update readme_filler.py with correct Gemini CLI and Claude Code sections
- Fix pandas/parquet .gitignore to allow publishing JSON files
- Remove unused imports (F401): asyncio, sys, os, ToolError across
  arxiv, chronolog, node-hardware, parallel-sort, plot, slurm
- Apply ruff format to all server and test files
- Add S104 to ndp ruff ignore (intentional 0.0.0.0 binding for HTTP)
…tall

- Update server.json format: packages[] with registryType/identifier
  (replaces package{} with registry_name/name)
- Add $schema and title fields per official schema
- Fix publish.yml: correct mcp-publisher install URL (tarball format)
- Fix publish.yml: use github-oidc auth (not github)
- Add mcp-name verification comments to README for PyPI validation
- Update generate_server_json.py to produce new schema format
- Fix MyPy transport type errors: use literal "stdio"/"http" in all 16 server.py
- Fix slurm MyPy: add missing partition/node params to implementation functions
- Upgrade FastMCP from >=3.0.0rc2 to >=3.0.1 (locks to 3.0.2), resolving all CVEs
- Regenerate all 16 uv.lock files with upgraded dependencies
- Fix pandas 3.x compatibility: ChainedAssignment, frequency aliases, StringDtype
- Fix hdf5 test assertion for updated config version
- Update all server versions to 2.0.1 in README
- Migrate docs URLs from toolkit.iowarp.ai to docs.iowarp.ai (57 occurrences)
- Update clio-kit-website CNAME and config for new docs domain
- Fix pyproject.toml version from 2.0.2 to 2.0.1 (matching release tag)
- Regenerate all 16 server.json with correct PyPI version 2.0.1
- MCP Registry and Smithery publish jobs now fail on errors instead of
  silently swallowing failures with || continue
- Add SMITHERY_TOKEN verification step before Smithery publishing
Smithery was trying to scan servers via HTTP because `mcp publish <url>`
treats them as external servers. Stdio servers need a smithery.yaml with
startCommand config and must be published from the project directory
without a URL argument.
Smithery deprecated stdio transport and now only supports hosted HTTP
servers. All clio-kit servers require local access (file system, HPC,
hardware) so Smithery hosting is not viable. Removed smithery.yaml
files and publish job. Servers remain discoverable via MCP Registry
and PyPI.
The MCP Registry displays the top-level "version" field from
server.json. It was hardcoded to each server's local pyproject.toml
version (1.0.0) instead of the root PyPI package version (2.0.1).
…b9e37d8dd5'

git-subtree-dir: plugins/chrono-mcp
git-subtree-mainline: 9caff06
git-subtree-split: 109e853
@iameneko iameneko added the Plugins Cross-cutting work on the serving/plugin layer (ChronoKVS, ChronoSQL, ChronoPubSub, etc.) label May 26, 2026
@iameneko iameneko self-assigned this May 26, 2026
@github-actions

This comment was marked as resolved.

The C++ reader sources imported from clio-kit (reader.cpp,
HDF5ArchiveReadingAgent.h) used a different style and failed the
repo's clang-format-18 check. Reformat in place; no semantic change.
@iameneko iameneko linked an issue May 26, 2026 that may be closed by this pull request
@iameneko iameneko marked this pull request as ready for review May 26, 2026 20:49
@iameneko iameneko requested review from fkengun and ibrodkin May 26, 2026 20:49
raise ToolError(f"Failed to connect to ChronoLog: {ret}")

attrs: dict[str, str] = {}
ret = config.client.CreateChronicle(chronicle, attrs, 1)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it still calls the old api. we do not have attrs and flag now. pls check all other APIs as well.


ret, handle = config.client.AcquireStory(chronicle, story, attrs, 1)
if ret != 0:
config.client.ReleaseStory(chronicle, story)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if AcquireStory() fails, no need to call ReleaseStory().

# HDF5 reader binary + config file
READER_BINARY = os.getenv(
"HDF5_READER_BIN",
"/home/ssonar/chronolog/Debug/reader_script/build/hdf5_file_reader",
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hardcoded path.

@iameneko iameneko merged commit f23a07d into develop May 26, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Plugins Cross-cutting work on the serving/plugin layer (ChronoKVS, ChronoSQL, ChronoPubSub, etc.)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Migrate ChronoLog MCP server in-tree and improve it

4 participants