Skip to content

sync mcp.science servers #231

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Aug 14, 2025
Merged

sync mcp.science servers #231

merged 2 commits into from
Aug 14, 2025

Conversation

GabrielDrapor
Copy link
Contributor

@GabrielDrapor GabrielDrapor commented Aug 12, 2025

User description

https://github.com/pathintegral-institute/mcp.science/tree/main/servers

  • gpaw_computation
  • nemad
  • netket
  • timer
  • tinydb

PR Type

Enhancement


Description

  • Add 5 new MCP servers from mcp.science repository

  • Include quantum physics, materials science, and database servers

  • Add jsonschema dependency for validation support


Diagram Walkthrough

flowchart LR
  A["mcp.science repository"] --> B["5 new servers"]
  B --> C["gpaw-computation"]
  B --> D["nemad"]
  B --> E["netket"]
  B --> F["timer"]
  B --> G["tinydb"]
  H["pyproject.toml"] --> I["jsonschema dependency"]
Loading

File Walkthrough

Relevant files
Enhancement
gpaw-computation.json
Add GPAW quantum computation server                                           

mcp-registry/servers/gpaw-computation.json

  • Add GPAW computational server for quantum mechanics simulations
  • Configure Materials Project API integration
  • Include DFT calculation examples and structure optimization
+75/-0   
nemad.json
Add NEMAD materials database server                                           

mcp-registry/servers/nemad.json

  • Add NEMAD materials database server configuration
  • Include search tools for magnetic, thermoelectric materials
  • Configure API key authentication for nemad.org
+81/-0   
netket.json
Add NetKet quantum physics server                                               

mcp-registry/servers/netket.json

  • Add NetKet quantum many-body physics server
  • Support multiple lattice geometries and Hamiltonian models
  • Include SSH and Heisenberg model examples
+59/-0   
timer.json
Add timer server with streaming updates                                   

mcp-registry/servers/timer.json

  • Add timer server with countdown functionality
  • Include streaming progress notifications
  • Demonstrate incremental updates for long-running tasks
+74/-0   
tinydb.json
Add TinyDB NoSQL database server                                                 

mcp-registry/servers/tinydb.json

  • Add TinyDB NoSQL database server
  • Include CRUD operations and table management tools
  • Support custom database file configuration
+96/-0   
Dependencies
pyproject.toml
Add jsonschema dependency                                                               

pyproject.toml

  • Add jsonschema dependency version 4.24.0 or higher
+1/-0     

Summary by CodeRabbit

  • New Features

    • Added GPAW Computation server for materials simulations with example prompts.
    • Added NEMAD Materials Database server with search/formula/result tools (requires NEMAD_API_KEY).
    • Added NetKet Quantum Physics server for many-body model analysis with usage examples.
    • Added Timer server offering a streaming wait/countdown tool.
    • Added TinyDB server providing CRUD-style database operations and maintenance workflows.
    • All servers include example prompts and support installation via the uvx Python installer; marked official.
  • Chores

    • Added runtime dependency: jsonschema>=4.24.0.

Copy link

coderabbitai bot commented Aug 12, 2025

Walkthrough

Adds five new MCP server registry manifests (gpaw-computation, nemad, netket, timer, tinydb) with metadata, install instructions, tools/arguments where applicable, and examples; and updates pyproject.toml to add runtime dependency jsonschema>=4.24.0.

Changes

Cohort / File(s) Summary
GPAW Computation server
mcp-registry/servers/gpaw-computation.json
Adds official GPAW Computation server manifest: metadata (display_name, description, repo, homepage, author, license, categories, tags), empty arguments, one uvx Python installation (uvx ["mcp-science","gpaw-computation"], recommended), three example prompts, is_official: true.
NEMAD Materials Database server
mcp-registry/servers/nemad.json
Adds official NEMAD manifest: metadata, required NEMAD_API_KEY argument, tools (nemad_search, nemad_formula_search, nemad_read_results), one uvx Python installation (uvx ["mcp-science","nemad"], env includes NEMAD_API_KEY, recommended), examples, is_official: true.
NetKet Quantum Physics server
mcp-registry/servers/netket.json
Adds official NetKet manifest: metadata, one uvx Python installation (uvx ["mcp-science","netket"], recommended), four usage examples, is_official: true.
Timer server
mcp-registry/servers/timer.json
Adds official Timer manifest exposing wait tool with required integer inputs time_to_wait and notif_interval (ms), uvx Python installation (uvx ["mcp-science","timer"], recommended), three examples demonstrating streaming progress, is_official: true.
TinyDB server
mcp-registry/servers/tinydb.json
Adds official TinyDB manifest: metadata, optional DB_FILE argument, CRUD-style tools (create_table, insert_document, query_documents, update_documents, delete_documents, purge_table, drop_table), one uvx Python installation (uvx ["mcp-science","tinydb"], recommended), examples, is_official: true.
Dependency update
pyproject.toml
Adds runtime dependency jsonschema>=4.24.0.

Sequence Diagram(s)

sequenceDiagram
  participant Dev as Developer
  participant Registry as MCP Registry
  participant PM as Package Manager (uvx)
  participant Server as MCP Server

  Dev->>Registry: Read server manifest (metadata, args, install)
  Dev->>PM: Run install command (uvx ["mcp-science","<server>"])
  PM-->>Server: Fetch & install package
  Dev->>Server: Invoke tool / API (with args, env)
  Server-->>Dev: Return results or stream updates
Loading
sequenceDiagram
  participant Client
  participant Timer as Timer Server
  Client->>Timer: wait(time_to_wait, notif_interval)
  loop every notif_interval
    Timer-->>Client: progress update (stream)
  end
  Timer-->>Client: completion notification
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~15–20 minutes

Poem

I nibble bytes beneath the log,
Five new servers hop from the bog.
Timers tick, databases hum,
Quantum waves and atoms come.
uvx opens the burrowed door—🐇✨

Tip

🔌 Remote MCP (Model Context Protocol) integration is now available!

Pro plan users can now connect to remote MCP servers from the Integrations page. Connect with popular remote MCPs such as Notion and Linear to add more context to your reviews and chats.


📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between a0863b5 and c16ecc4.

⛔ Files ignored due to path filters (1)
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (6)
  • mcp-registry/servers/gpaw-computation.json (1 hunks)
  • mcp-registry/servers/nemad.json (1 hunks)
  • mcp-registry/servers/netket.json (1 hunks)
  • mcp-registry/servers/timer.json (1 hunks)
  • mcp-registry/servers/tinydb.json (1 hunks)
  • pyproject.toml (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (6)
  • pyproject.toml
  • mcp-registry/servers/timer.json
  • mcp-registry/servers/gpaw-computation.json
  • mcp-registry/servers/tinydb.json
  • mcp-registry/servers/nemad.json
  • mcp-registry/servers/netket.json
✨ Finishing Touches
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch Jiarui/sync-mcp-science

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR/Issue comments)

Type @coderabbitai help to get the list of available commands.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Status, Documentation and Community

  • Visit our Status Page to check the current availability of CodeRabbit.
  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Contributor

PR Reviewer Guide 🔍

Here are some key observations to aid the review process:

⏱️ Estimated effort to review: 2 🔵🔵⚪⚪⚪
🧪 No relevant tests
🔒 Security concerns

Sensitive information exposure:
The registry surfaces API key argument names (MPI_API_KEY, NEMAD_API_KEY) that will be passed via environment variables. Ensure these are not logged by default in server startup or error messages and that documentation warns users not to commit keys. No direct code in this PR leaks secrets, but verify downstream servers redact env values in logs.

⚡ Recommended focus areas for review

Possible Typo

The environment variable is named MPI_API_KEY but described as a Materials Project API key. Verify the correct provider and name (commonly MAPI_KEY) to avoid user confusion and misconfiguration.

  "MPI_API_KEY": {
    "description": "Materials Project API key for accessing structure data",
    "required": true,
    "example": "your-materials-project-api-key"
  },
  "STRUCTURE_CACHE_PATH": {
    "description": "Absolute path to structure cache directory (points to Materials Project server output)",
    "required": true,
    "example": "/path/to/structure/cache"
  }
},
"installations": {
  "python": {
    "type": "python",
    "command": "uvx",
    "args": ["mcp-science", "gpaw-computation"],
    "package": "git+https://github.com/pathintegral-institute/mcp.science.git#subdirectory=servers/gpaw-computation",
    "env": {
      "MPI_API_KEY": "${MPI_API_KEY}",
      "STRUCTURE_CACHE_PATH": "${STRUCTURE_CACHE_PATH}"
    },
Schema Robustness

inputSchema uses integers for millisecond durations without bounds or minimums; consider adding minimum: 0 and reasonable upper limits to prevent negative or excessively large waits.

  "type": "object",
  "properties": {
    "time_to_wait": {
      "type": "integer",
      "description": "Total duration to wait in milliseconds"
    },
    "notif_interval": {
      "type": "integer", 
      "description": "Interval between progress updates in milliseconds"
    }
  },
  "required": ["time_to_wait", "notif_interval"]
}
Execution Module Consistency

Pip installation uses -m tinydb_server while uvx uses mcp-science tinydb; ensure the module/entrypoint name is correct and consistent to prevent runtime startup failures.

  "type": "python",
  "command": "python",
  "args": ["-m", "tinydb_server"],
  "package": "git+https://github.com/pathintegral-institute/mcp.science.git#subdirectory=servers/tinydb",
  "description": "Install from GitHub using pip"
}

Copy link
Contributor

qodo-merge-pro bot commented Aug 12, 2025

PR Code Suggestions ✨

Explore these optional code suggestions:

CategorySuggestion                                                                                                                                    Impact
High-level
Validate registry schema

The new server JSON files introduce custom fields (e.g., installations with uvx,
is_official, tools without inputSchema) but there’s no schema validation or CI
ensuring consistent structure across entries. Add centralized JSON Schema for
registry entries and enforce it in CI to catch missing/incorrect fields (names,
required arguments, env var placeholders, command/args consistency) before
merge, leveraging the newly added jsonschema dependency.

Examples:

mcp-registry/servers/timer.json [21-36]
"name": "wait",
"description": "Wait for a specified time with progress notifications",
"inputSchema": {
  "type": "object",
  "properties": {
    "time_to_wait": {
      "type": "integer",
      "description": "Total duration to wait in milliseconds"
    },
    "notif_interval": {

 ... (clipped 6 lines)
mcp-registry/servers/nemad.json [28-30]
"name": "nemad_search",
"description": "Search materials by elements in magnetic, thermoelectric, and superconductor databases"

Solution Walkthrough:

Before:

# Current CI/CD Process
1. Contributor adds a new `server.json` file.
2. PR is reviewed manually for correctness.
3. Potential for inconsistent or invalid JSON files to be merged.

After:

# Proposed CI/CD Process
1. Define a `server.schema.json` for the registry.
2. Contributor adds a new `server.json` file.
3. CI step automatically validates all `*.json` files against the schema.
   # Example validation command
   jsonschema -i mcp-registry/servers/timer.json server.schema.json
4. PR is blocked if validation fails, ensuring consistency.
Suggestion importance[1-10]: 9

__

Why: This suggestion addresses a critical data integrity and maintainability issue for the server registry, correctly identifying inconsistencies in the PR and proposing a robust solution using a dependency added in this same PR.

High
Possible issue
Align env var with argument name

Update the environment variable to match the corrected argument name; otherwise
the server will not receive the API key at runtime. Replace MPI_API_KEY with
MAPI_KEY in all installation blocks.

mcp-registry/servers/gpaw-computation.json [38-41]

 "env": {
-  "MPI_API_KEY": "${MPI_API_KEY}",
+  "MAPI_KEY": "${MAPI_KEY}",
   "STRUCTURE_CACHE_PATH": "${STRUCTURE_CACHE_PATH}"
 },
  • Apply / Chat
Suggestion importance[1-10]: 8

__

Why: This is a critical follow-up to the previous suggestion; failing to update the environment variable mapping would break the API key propagation to the server, causing a runtime failure.

Medium
Use correct Materials Project key name

The key for Materials Project is commonly named MAPI_KEY; using MPI_API_KEY can
cause misconfiguration and failed auth. Rename the argument and corresponding
env var to MAPI_KEY to align with standard expectations.

mcp-registry/servers/gpaw-computation.json [20-31]

 "arguments": {
-  "MPI_API_KEY": {
+  "MAPI_KEY": {
     "description": "Materials Project API key for accessing structure data",
     "required": true,
     "example": "your-materials-project-api-key"
   },
   "STRUCTURE_CACHE_PATH": {
     "description": "Absolute path to structure cache directory (points to Materials Project server output)",
     "required": true,
     "example": "/path/to/structure/cache"
   }
 },
  • Apply / Chat
Suggestion importance[1-10]: 7

__

Why: The suggestion correctly identifies that MAPI_KEY is the standard convention for the Materials Project API key, and using MPI_API_KEY could lead to user confusion and configuration errors.

Medium
General
Enforce positive timing parameters

Without bounds, negative or zero values can cause immediate completion or tight
loops. Add minimum: 1 to both integers to enforce positive durations and avoid
runtime issues.

mcp-registry/servers/timer.json [23-36]

 "inputSchema": {
   "type": "object",
   "properties": {
     "time_to_wait": {
       "type": "integer",
+      "minimum": 1,
       "description": "Total duration to wait in milliseconds"
     },
     "notif_interval": {
       "type": "integer", 
+      "minimum": 1,
       "description": "Interval between progress updates in milliseconds"
     }
   },
   "required": ["time_to_wait", "notif_interval"]
 }
  • Apply / Chat
Suggestion importance[1-10]: 6

__

Why: The suggestion correctly proposes adding a minimum constraint to the input schema to prevent invalid (zero or negative) timer values, which improves the robustness of the tool's interface.

Low
Organization
best practice
Define tool input schemas

Add inputSchema for each tool to define required parameters (e.g., elements
list, database type, formula string, range indices). This enforces validation
and improves discoverability for clients and UIs.

mcp-registry/servers/nemad.json [26-39]

 "tools": [
     {
       "name": "nemad_search",
-      "description": "Search materials by elements in magnetic, thermoelectric, and superconductor databases"
+      "description": "Search materials by elements in magnetic, thermoelectric, and superconductor databases",
+      "inputSchema": {
+        "type": "object",
+        "properties": {
+          "elements": { "type": "array", "items": { "type": "string" }, "description": "List of element symbols, e.g., [\"Fe\", \"O\"]" },
+          "database": { "type": "string", "enum": ["magnetic", "thermoelectric", "superconductor"], "description": "Target NEMAD sub-database" }
+        },
+        "required": ["elements", "database"]
+      }
     },
     {
       "name": "nemad_formula_search", 
-      "description": "Search materials by exact chemical formula"
+      "description": "Search materials by exact chemical formula",
+      "inputSchema": {
+        "type": "object",
+        "properties": {
+          "formula": { "type": "string", "description": "Exact chemical formula, e.g., \"Fe2O3\"" }
+        },
+        "required": ["formula"]
+      }
     },
     {
       "name": "nemad_read_results",
-      "description": "Read specific ranges of search results from previous queries"
+      "description": "Read specific ranges of search results from previous queries",
+      "inputSchema": {
+        "type": "object",
+        "properties": {
+          "query_id": { "type": "string", "description": "Identifier from a previous search" },
+          "start": { "type": "integer", "minimum": 0, "description": "Start index (inclusive)" },
+          "end": { "type": "integer", "minimum": 1, "description": "End index (exclusive)" }
+        },
+        "required": ["query_id", "start", "end"]
+      }
     }
   ]

[To ensure code accuracy, apply this suggestion manually]

Suggestion importance[1-10]: 6

__

Why:
Relevant best practice - Provide explicit input schema for declared tools to ensure predictable contracts and validation.

Low
  • Update

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🧹 Nitpick comments (7)
pyproject.toml (1)

66-74: Align or deduplicate jsonschema across runtime/dev to avoid split version constraints

You now have jsonschema>=4.24.0 in runtime deps and jsonschema>=4.23.0 in the dev group. This split can cause confusion in resolution. Prefer aligning versions or removing the duplicate from dev if not strictly needed.

Apply one of these diffs:

Option A: Align dev to the same minimum.

-    "jsonschema>=4.23.0",
+    "jsonschema>=4.24.0",

Option B: Remove duplicate from dev (dev will still install runtime deps).

-    "jsonschema>=4.23.0",
mcp-registry/servers/timer.json (2)

26-36: Tighten input validation for integer durations

Add minimum constraints so negative or zero durations aren’t accepted. Optional: provide sensible defaults.

Apply this diff:

           "time_to_wait": {
             "type": "integer",
             "description": "Total duration to wait in milliseconds"
+            ,"minimum": 1
+            ,"default": 5000
           },
           "notif_interval": {
             "type": "integer", 
             "description": "Interval between progress updates in milliseconds"
+            ,"minimum": 1
+            ,"default": 1000
           }

19-37: Consider documenting streaming behavior in tool metadata (if supported by registry schema)

Since this server streams progress updates, if the registry supports a capability flag (e.g., supports_streaming), consider adding it so clients can surface streaming UX cues. If not supported by schema, ignore.

mcp-registry/servers/tinydb.json (2)

20-25: Provide a default for DB_FILE to match the description

The description mentions defaults to database.json; encode that as default to improve UX.

     "DB_FILE": {
       "description": "Path to the TinyDB database file (optional, defaults to database.json)",
       "required": false,
-      "example": "/path/to/custom_database.json"
+      "example": "/path/to/custom_database.json",
+      "default": "database.json"
     }

26-55: Define input schemas for tools to enable validation and better prompts

Right now tools lack input schemas, which can hinder client-side validation and autocompletion. Recommend adding minimal JSON Schemas for the most common operations.

Example for two tools:

     {
       "name": "create_table",
-      "description": "Create a new table in the database"
+      "description": "Create a new table in the database",
+      "inputSchema": {
+        "type": "object",
+        "properties": {
+          "table_name": { "type": "string", "description": "Name of the table to create" }
+        },
+        "required": ["table_name"]
+      }
     },
     {
       "name": "insert_document",
-      "description": "Insert a document into a table"
+      "description": "Insert a document into a table",
+      "inputSchema": {
+        "type": "object",
+        "properties": {
+          "table_name": { "type": "string" },
+          "document": { "type": "object", "additionalProperties": true }
+        },
+        "required": ["table_name", "document"]
+      }
     },

If helpful, I can provide schemas for the remaining tools.

mcp-registry/servers/nemad.json (1)

26-39: Add input schemas for tools to clarify required inputs

Defining schemas improves validation and discoverability.

Proposed minimal schemas:

     {
       "name": "nemad_search",
-      "description": "Search materials by elements in magnetic, thermoelectric, and superconductor databases"
+      "description": "Search materials by elements in magnetic, thermoelectric, and superconductor databases",
+      "inputSchema": {
+        "type": "object",
+        "properties": {
+          "elements": { "type": "array", "items": { "type": "string" }, "minItems": 1 },
+          "database": { "type": "string", "enum": ["magnetic", "thermoelectric", "superconductor"] }
+        },
+        "required": ["elements", "database"]
+      }
     },
     {
       "name": "nemad_formula_search", 
-      "description": "Search materials by exact chemical formula"
+      "description": "Search materials by exact chemical formula",
+      "inputSchema": {
+        "type": "object",
+        "properties": {
+          "formula": { "type": "string", "description": "Exact chemical formula, e.g., Fe2O3" }
+        },
+        "required": ["formula"]
+      }
     },
     {
       "name": "nemad_read_results",
-      "description": "Read specific ranges of search results from previous queries"
+      "description": "Read specific ranges of search results from previous queries",
+      "inputSchema": {
+        "type": "object",
+        "properties": {
+          "start": { "type": "integer", "minimum": 0 },
+          "end": { "type": "integer", "minimum": 1 }
+        },
+        "required": ["start", "end"]
+      }
     }
mcp-registry/servers/gpaw-computation.json (1)

15-19: Enhance discoverability with more specific tags.

Add domain-specific tags so users can find this server via common queries.

Apply:

   "tags": [
     "quantum",
-    "computation"
+    "computation",
+    "gpaw",
+    "dft",
+    "ase",
+    "materials-science"
   ],
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between fd3f417 and 96fcbab.

⛔ Files ignored due to path filters (1)
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (6)
  • mcp-registry/servers/gpaw-computation.json (1 hunks)
  • mcp-registry/servers/nemad.json (1 hunks)
  • mcp-registry/servers/netket.json (1 hunks)
  • mcp-registry/servers/timer.json (1 hunks)
  • mcp-registry/servers/tinydb.json (1 hunks)
  • pyproject.toml (1 hunks)
🔇 Additional comments (12)
pyproject.toml (2)

40-41: Good addition: runtime jsonschema dependency

Adding jsonschema as a runtime dep makes sense if you validate server manifests at runtime.


22-41: jsonschema runtime usage confirmed
The jsonschema library is imported and used at runtime in the following scripts, so keeping it in dependencies is appropriate:

  • scripts/validate_manifest.py (imports at line 9; calls jsonschema.validate at line 43)
  • scripts/prepare.py (imports at line 9; calls jsonschema.validate at line 53)

No changes needed.

mcp-registry/servers/timer.json (1)

48-54: Verify Python module entrypoint for pip installation

The pip installation uses: command "python", args ["-m", "timer"]. Please confirm that servers/timer installs a Python package exposing a module named "timer" with a main entrypoint. If the module/package is named differently (e.g., timer_server), this will fail at runtime.

If unsure, please check the upstream package/module by inspecting the servers/timer pyproject or package folder structure in the mcp.science repo.

mcp-registry/servers/tinydb.json (1)

65-71: Verify Python module entrypoint for pip installation

This uses args ["-m", "tinydb_server"]. Please confirm the upstream package exposes this module with a main entrypoint after installation from the subdirectory. Otherwise, clients won’t be able to start the server via pip.

mcp-registry/servers/nemad.json (2)

20-25: Nice: clear API key argument with example and env mapping below

The API key argument and environment mapping are clearly documented.


46-51: Interpolation Syntax Confirmed Across All Manifests

All server entries—including mcp-registry/servers/nemad.json—use the "VAR": "${VAR}" pattern in their env blocks, demonstrating that the registry loader consistently supports ${…} interpolation. No changes are required.

mcp-registry/servers/netket.json (3)

28-34: High risk of module name collision for pip entrypoint (-m netket)

Using python -m netket may invoke the upstream NetKet library module rather than the MCP server, depending on how the servers/netket package is named. Please verify the module path for the MCP server’s main and adjust accordingly (e.g., a dedicated module like netket_server or a package-specific name).

If the upstream package exposes a different module, update args accordingly.


36-57: Examples look good

Well-scoped prompts covering common NetKet workflows.


14-18: Category “AI Systems” Confirmed
I verified the list of categories across all server manifests; “AI Systems” appears in the canonical set. No changes are needed.

mcp-registry/servers/gpaw-computation.json (3)

1-14: LGTM overall: manifest fields are complete and consistent.

Name, display_name, description, repository/homepage/author, license, and examples look solid.


74-75: Verify consistency of is_official flag

I wasn’t able to find any other server entries with is_official: true. Please confirm that marking this server as “official” aligns with the mcpm.sh policy and is consistent with how other mcp.science servers are flagged.

• File: mcp-registry/servers/gpaw-computation.json (line 74)


21-25: Confirm and correct Materials Project API key env var
The current var, "MPI_API_KEY", conflicts with MPI and doesn’t match either client’s expected name. Please verify which client this service uses and rename accordingly:

  • For pymatgen’s MPRester → PMG_MAPI_KEY
  • For the newer mp-api client → MP_API_KEY

Affected location:
• mcp-registry/servers/gpaw-computation.json (lines 21–25)

Example diffs:

-    "MPI_API_KEY": {
+    "PMG_MAPI_KEY": {
-    "MPI_API_KEY": {
+    "MP_API_KEY": {

Copy link
Contributor

No diff detected between the PR’s base (bd006214) and head (3ec91a6a).
Nothing to review for this PR scope.


View workflow run

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

♻️ Duplicate comments (1)
mcp-registry/servers/gpaw-computation.json (1)

20-30: Fix uvx installation entry shape to match repo standard

The uvx entry should use type "uvx" with --from and no separate package field. Current shape risks install failures.

Apply:

-  "installations": {
-    "python": {
-      "type": "python",
-      "command": "uvx",
-      "args": ["mcp-science", "gpaw-computation"],
-      "env": {},
-      "description": "Install from GitHub using uvx",
-      "recommended": true
-    }
-  },
+  "installations": {
+    "uvx": {
+      "type": "uvx",
+      "command": "uvx",
+      "args": [
+        "--from",
+        "git+https://github.com/pathintegral-institute/mcp.science.git#subdirectory=servers/gpaw-computation",
+        "gpaw-computation"
+      ],
+      "env": {},
+      "description": "Install from GitHub using uvx",
+      "recommended": true
+    }
+  },
🧹 Nitpick comments (2)
pyproject.toml (1)

66-74: Align dev and runtime jsonschema versions to avoid confusion

Dev group pins jsonschema>=4.23.0 while runtime requires >=4.24.0. Aligning these avoids resolver surprises and keeps local/dev consistent with production.

Apply this diff to bump the dev group:

 dev = [
@@
-    "jsonschema>=4.23.0",
+    "jsonschema>=4.24.0",
mcp-registry/servers/nemad.json (1)

19-25: Consider marking API key as a secret in schema if supported

If your manifest schema supports a “secret” or “sensitive” flag for arguments, mark NEMAD_API_KEY accordingly to avoid accidental logging or display in UIs.

If supported by the registry schema, update the argument to:

       "description": "API key for accessing NEMAD database from nemad.org",
       "required": true,
+      "secret": true,
       "example": "your-nemad-api-key"
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 96fcbab and 3ec91a6.

⛔ Files ignored due to path filters (1)
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (6)
  • mcp-registry/servers/gpaw-computation.json (1 hunks)
  • mcp-registry/servers/nemad.json (1 hunks)
  • mcp-registry/servers/netket.json (1 hunks)
  • mcp-registry/servers/timer.json (1 hunks)
  • mcp-registry/servers/tinydb.json (1 hunks)
  • pyproject.toml (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
  • mcp-registry/servers/tinydb.json
  • mcp-registry/servers/timer.json
🧰 Additional context used
🧬 Code Graph Analysis (1)
mcp-registry/servers/gpaw-computation.json (2)
src/mcpm/commands/install.py (1)
  • global_add_server (64-72)
src/mcpm/global_config.py (1)
  • add_server (104-120)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: codex
🔇 Additional comments (5)
pyproject.toml (1)

40-41: Runtime jsonschema addition looks reasonable

Adding jsonschema as a runtime dependency aligns with manifest validation goals. No API surface impact.

mcp-registry/servers/nemad.json (1)

1-18: Metadata, tags, and categorization look good

Name, display_name, repo links, and tags are consistent and clear.

mcp-registry/servers/gpaw-computation.json (1)

31-49: Examples and metadata read well

Prompts are specific and actionable. Good coverage across use cases.

mcp-registry/servers/netket.json (2)

1-18: Good metadata and example coverage

Name, description, and examples look solid and consistent with other entries.


19-35: Refactor uvx installation block in netket.json

Only the netket.json manifest uses uvx—no other server manifests define an uvx block. Update its installation entry to the project’s standard pattern:

 mcp-registry/servers/netket.json
@@
   "installations": {
-    "python": {
-      "type": "python", 
-      "command": "uvx",
-      "args": ["mcp-science", "netket"],
-      "package": "git+https://github.com/pathintegral-institute/mcp.science.git#subdirectory=servers/netket",
-      "description": "Install from GitHub using uvx",
-      "recommended": true
-    },
+    "uvx": {
+      "type": "uvx",
+      "command": "uvx",
+      "args": [
+        "--from",
+        "git+https://github.com/pathintegral-institute/mcp.science.git#subdirectory=servers/netket",
+        "netket"
+      ],
+      "description": "Install from GitHub using uvx",
+      "recommended": true
+    },
     "pip": {
       "type": "python",
       "command": "python",
       "args": ["-m", "netket"],
       "package": "git+https://github.com/pathintegral-institute/mcp.science.git#subdirectory=servers/netket",
       "description": "Install from GitHub using pip"
     }

Comment on lines +20 to +30
"arguments": {},
"installations": {
"python": {
"type": "python",
"command": "uvx",
"args": ["mcp-science", "gpaw-computation"],
"env": {},
"description": "Install from GitHub using uvx",
"recommended": true
}
},
Copy link

Choose a reason for hiding this comment

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

💡 Verification agent

🧩 Analysis chain

Add Materials Project API key argument and env forwarding

PR description states MP API integration, but no argument/env is defined. This likely breaks authenticated flows.

Proposed update adding MP_API_KEY and forwarding it:

   "tags": [
     "quantum",
     "computation"
   ],
-  "arguments": {},
+  "arguments": {
+    "MP_API_KEY": {
+      "description": "Materials Project API key (https://materialsproject.org)",
+      "required": true,
+      "secret": true,
+      "example": "your-mp-api-key"
+    }
+  },
   "installations": {
-    "uvx": {
+    "uvx": {
       "type": "uvx",
       "command": "uvx",
       "args": [
         "--from",
         "git+https://github.com/pathintegral-institute/mcp.science.git#subdirectory=servers/gpaw-computation",
         "gpaw-computation"
       ],
-      "env": {},
+      "env": {
+        "MP_API_KEY": "${MP_API_KEY}"
+      },
       "description": "Install from GitHub using uvx",
       "recommended": true
     }
   },

Run this to discover the canonical env var used across manifests for Materials Project:


🏁 Script executed:

#!/bin/bash
rg -n --pretty --hidden -S 'MP_API_KEY|MAPI_KEY|MPI_API_KEY' mcp-registry/servers || true

Length of output: 192


🏁 Script executed:

#!/bin/bash
# Display the first 100 lines of the gpaw-computation manifest for context
sed -n '1,100p' mcp-registry/servers/gpaw-computation.json

Length of output: 1666


Add MP_API_KEY argument and forward env to Python installer

To enable authenticated Materials Project API calls (per PR description), the gpaw-computation.json manifest needs to declare the MP_API_KEY argument and inject it into the installer’s environment. This follows the pattern in materials-project.json, which uses MP_API_KEY as the canonical variable name.

Targets:

  • mcp-registry/servers/gpaw-computation.json
--- a/mcp-registry/servers/gpaw-computation.json
+++ b/mcp-registry/servers/gpaw-computation.json
@@
-  "arguments": {},
+  "arguments": {
+    "MP_API_KEY": {
+      "description": "Materials Project API key (https://materialsproject.org)",
+      "required": true,
+      "secret": true,
+      "example": "your-mp-api-key"
+    }
+  },
@@
-    "python": {
+    "python": {
       "type": "python",
       "command": "uvx",
       "args": ["mcp-science", "gpaw-computation"],
-      "env": {},
+      "env": {
+        "MP_API_KEY": "${MP_API_KEY}"
+      },
       "description": "Install from GitHub using uvx",
       "recommended": true
     }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"arguments": {},
"installations": {
"python": {
"type": "python",
"command": "uvx",
"args": ["mcp-science", "gpaw-computation"],
"env": {},
"description": "Install from GitHub using uvx",
"recommended": true
}
},
"arguments": {
"MP_API_KEY": {
"description": "Materials Project API key (https://materialsproject.org)",
"required": true,
"secret": true,
"example": "your-mp-api-key"
}
},
"installations": {
"python": {
"type": "python",
"command": "uvx",
"args": ["mcp-science", "gpaw-computation"],
"env": {
"MP_API_KEY": "${MP_API_KEY}"
},
"description": "Install from GitHub using uvx",
"recommended": true
}
},
🤖 Prompt for AI Agents
In mcp-registry/servers/gpaw-computation.json around lines 20–30, the manifest
is missing the MP_API_KEY argument and does not forward that environment
variable into the Python installer; add an entry "MP_API_KEY" under the
top-level "arguments" object and add an "MP_API_KEY" key to
installations.python.env that forwards the argument value (e.g. set the env
value to the corresponding argument placeholder used in other manifests so the
installer receives MP_API_KEY at runtime).

@GabrielDrapor GabrielDrapor force-pushed the Jiarui/sync-mcp-science branch from 3ec91a6 to a0863b5 Compare August 13, 2025 14:36
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 3ec91a6 and a0863b5.

⛔ Files ignored due to path filters (1)
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (6)
  • mcp-registry/servers/gpaw-computation.json (1 hunks)
  • mcp-registry/servers/nemad.json (1 hunks)
  • mcp-registry/servers/netket.json (1 hunks)
  • mcp-registry/servers/timer.json (1 hunks)
  • mcp-registry/servers/tinydb.json (1 hunks)
  • pyproject.toml (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (5)
  • mcp-registry/servers/gpaw-computation.json
  • mcp-registry/servers/tinydb.json
  • mcp-registry/servers/timer.json
  • pyproject.toml
  • mcp-registry/servers/nemad.json
🧰 Additional context used
🪛 Biome (2.1.2)
mcp-registry/servers/netket.json

[error] 27-27: Expected a property but instead found '}'.

Expected a property here.

(parse)

🪛 GitHub Actions: Test & Validate
mcp-registry/servers/netket.json

[error] 1-1: Schema validation error in step 'cardinalby/schema-validator-action@v3': Contents of 'mcp-registry/servers/netket.json' aren't a valid json: json: SyntaxError: Expected double-quoted property name in JSON at position 863.

🔇 Additional comments (1)
mcp-registry/servers/netket.json (1)

1-51: Content LGTM

Beyond the JSON comma issue, the manifest fields, examples, and installation instructions look consistent with the other servers described in the PR.

@GabrielDrapor GabrielDrapor force-pushed the Jiarui/sync-mcp-science branch from a0863b5 to c16ecc4 Compare August 14, 2025 02:56
@GabrielDrapor GabrielDrapor merged commit c237095 into main Aug 14, 2025
8 checks passed
@GabrielDrapor GabrielDrapor deleted the Jiarui/sync-mcp-science branch August 14, 2025 03:17
@mcpm-semantic-release
Copy link

🎉 This PR is included in version 2.7.0 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant