You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hugegraph.apache.org by ji...@apache.org on 2026/09/26 12:27:30 UTC

(hugegraph-ai) 03/11: chore(mcp): add CI and distribution scaffolding

This is an automated email from the ASF dual-hosted git repository.

imbajin pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/hugegraph-ai.git

commit 080b8e28e54a2cbfc19072e66fb5cfb576e2fe83
Author: duyifeng01 <du...@baidu.com>
AuthorDate: Fri Aug 14 16:37:34 2026 +0800

    chore(mcp): add CI and distribution scaffolding
    
    - Add MCP coverage and quality checks.
    - Document tool usage and update examples.
    - Introduce the initial package publishing workflow.
---
 .github/workflows/hugegraph-mcp.yml                | 203 +++++++++++++++++++++
 .github/workflows/publish-hugegraph-mcp.yml        |  82 +++++++++
 .../workflows/publish-hugegraph-python-client.yml  |  76 ++++++++
 .github/workflows/ruff.yml                         |  42 ++++-
 README.md                                          |  18 +-
 hugegraph-llm/README.md                            |  20 +-
 hugegraph-mcp/README.md                            |  38 +++-
 hugegraph-mcp/README.zh-CN.md                      |  38 +++-
 hugegraph-mcp/docs/releasing.md                    |  32 ++++
 hugegraph-mcp/pyproject.toml                       |  26 ++-
 .../src/hugegraph_ml/examples/seal_example.py      |   5 +-
 pyproject.toml                                     |   5 +-
 skills/hugegraph-data-importer/SKILL.md            |  46 +++++
 skills/hugegraph-data-importer/agents/openai.yaml  |  21 +++
 skills/hugegraph-operator/SKILL.md                 |  32 ++++
 skills/hugegraph-operator/agents/openai.yaml       |  21 +++
 skills/hugegraph-query-analyst/SKILL.md            |  25 +++
 skills/hugegraph-query-analyst/agents/openai.yaml  |  21 +++
 skills/hugegraph-regression-tester/SKILL.md        |  32 ++++
 .../hugegraph-regression-tester/agents/openai.yaml |  21 +++
 skills/hugegraph-schema-designer/SKILL.md          |  35 ++++
 .../hugegraph-schema-designer/agents/openai.yaml   |  21 +++
 22 files changed, 835 insertions(+), 25 deletions(-)

diff --git a/.github/workflows/hugegraph-mcp.yml b/.github/workflows/hugegraph-mcp.yml
new file mode 100644
index 00000000..00ed2763
--- /dev/null
+++ b/.github/workflows/hugegraph-mcp.yml
@@ -0,0 +1,203 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+name: HugeGraph-MCP CI
+
+on:
+  push:
+    branches:
+      - "main"
+      - "release-*"
+    paths:
+      - "hugegraph-mcp/**"
+      - "hugegraph-python-client/**"
+      - "pyproject.toml"
+      - "uv.lock"
+      - ".github/workflows/hugegraph-mcp.yml"
+  pull_request:
+    paths:
+      - "hugegraph-mcp/**"
+      - "hugegraph-python-client/**"
+      - "pyproject.toml"
+      - "uv.lock"
+      - ".github/workflows/hugegraph-mcp.yml"
+
+permissions:
+  contents: read
+
+jobs:
+  build:
+    runs-on: ubuntu-latest
+    strategy:
+      fail-fast: false
+      matrix:
+        python-version: ["3.10", "3.11", "3.12"]
+
+    steps:
+      - uses: actions/checkout@v4
+        with:
+          persist-credentials: false
+
+      - name: Set up Python ${{ matrix.python-version }}
+        uses: actions/setup-python@v5
+        with:
+          python-version: ${{ matrix.python-version }}
+
+      - name: Install uv
+        run: |
+          curl -LsSf https://astral.sh/uv/install.sh | sh
+          echo "$HOME/.cargo/bin" >> $GITHUB_PATH
+
+      - name: Cache dependencies
+        uses: actions/cache@v4
+        with:
+          path: |
+            ~/.cache/uv
+          key: ${{ runner.os }}-mcp-uv-${{ matrix.python-version }}-${{ hashFiles('**/pyproject.toml', 'uv.lock') }}
+          restore-keys: |
+            ${{ runner.os }}-mcp-uv-${{ matrix.python-version }}-
+
+      - name: Install MCP dependencies
+        run: |
+          # Install the standalone MCP packages with pip. FastMCP 3.x has
+          # platform-specific metadata that uv cannot resolve on Linux x86.
+          python -m pip install --upgrade pip
+          python -m pip install \
+            -e ./hugegraph-python-client \
+            -e ./hugegraph-mcp \
+            "pytest~=8.0.0" \
+            "ruff>=0.11.0"
+          python --version
+
+      - name: Verify isolated wheel install
+        if: matrix.python-version == '3.10'
+        run: |
+          rm -rf wheelhouse isolated-mcp-venv
+          uv build --wheel --out-dir wheelhouse hugegraph-python-client
+          uv build --wheel --out-dir wheelhouse hugegraph-mcp
+          python -m venv isolated-mcp-venv
+          isolated-mcp-venv/bin/python -m pip install \
+            --find-links wheelhouse \
+            wheelhouse/hugegraph_python_client-*.whl \
+            wheelhouse/hugegraph_mcp-*.whl
+          isolated-mcp-venv/bin/python - <<'PY'
+          from importlib.metadata import version
+          from types import SimpleNamespace
+          from unittest.mock import Mock
+
+          import hugegraph_mcp
+          import pyhugegraph
+          from hugegraph_mcp.server import main
+          from pyhugegraph.api.auth import AuthManager
+          from pyhugegraph.utils.huge_config import HGraphConfig
+          from pyhugegraph.utils.huge_requests import HGraphSession
+
+          assert version("hugegraph-python-client") == "1.7.0"
+          assert version("hugegraph-mcp") == "1.7.0"
+
+          class CaptureSession:
+              cfg = SimpleNamespace(graphspace="GS", gs_supported=True)
+
+              def request(self, path, method="GET", **_kwargs):
+                  self.path = path
+                  return {"ok": True}
+
+          capture = CaptureSession()
+          AuthManager(capture).list_users()
+          assert capture.path == "/graphspaces/GS/auth/users"
+
+          config = HGraphConfig(
+              "http://127.0.0.1:8080", "admin", "pwd", "g", graphspace="GS"
+          )
+          session = HGraphSession(config, session=Mock())
+          assert session.resolve("schema") == (
+              "http://127.0.0.1:8080/graphspaces/GS/graphs/g/schema"
+          )
+          PY
+
+      - name: Check MCP formatting
+        run: |
+          ruff format --check hugegraph-mcp/hugegraph_mcp hugegraph-mcp/tests
+
+      - name: Lint MCP
+        run: |
+          ruff check hugegraph-mcp/hugegraph_mcp hugegraph-mcp/tests
+
+      - name: Run MCP tests
+        run: |
+          python -m pytest hugegraph-mcp -m "not live and not integration and not llm"
+
+  real-hugegraph-write-path:
+    runs-on: ubuntu-latest
+    services:
+      hugegraph:
+        image: hugegraph/hugegraph:1.7.0
+        env:
+          PASSWORD: admin
+        options: >-
+          --health-cmd="curl -f http://localhost:8080/versions || exit 1"
+          --health-interval=10s
+          --health-timeout=5s
+          --health-retries=12
+        ports:
+          - 8080:8080
+    steps:
+      - uses: actions/checkout@v4
+        with:
+          persist-credentials: false
+
+      - name: Set up Python 3.10
+        uses: actions/setup-python@v5
+        with:
+          python-version: "3.10"
+
+      - name: Install uv
+        run: |
+          curl -LsSf https://astral.sh/uv/install.sh | sh
+          echo "$HOME/.cargo/bin" >> $GITHUB_PATH
+
+      - name: Cache dependencies
+        uses: actions/cache@v4
+        with:
+          path: |
+            ~/.cache/uv
+          key: ${{ runner.os }}-mcp-real-hugegraph-uv-${{ hashFiles('**/pyproject.toml', 'uv.lock') }}
+          restore-keys: |
+            ${{ runner.os }}-mcp-real-hugegraph-uv-
+
+      - name: Install MCP dependencies
+        run: |
+          python -m pip install --upgrade pip
+          python -m pip install \
+            -e ./hugegraph-python-client \
+            -e ./hugegraph-mcp \
+            "pytest~=8.0.0"
+
+      - name: Run real HugeGraph write-path tests
+        working-directory: hugegraph-mcp
+        env:
+          RUN_MCP_REAL_HUGEGRAPH_TESTS: "1"
+          HUGEGRAPH_URL: http://127.0.0.1:8080
+          HUGEGRAPH_GRAPH_PATH: DEFAULT/hugegraph
+          HUGEGRAPH_USER: admin
+          HUGEGRAPH_PASSWORD: admin
+          HUGEGRAPH_MCP_READONLY: "false"
+          HUGEGRAPH_MCP_ALLOW_AI: "false"
+        run: |
+          python -m pytest tests/integration/test_real_write_path.py -m real_hugegraph
diff --git a/.github/workflows/publish-hugegraph-mcp.yml b/.github/workflows/publish-hugegraph-mcp.yml
new file mode 100644
index 00000000..0a9597dc
--- /dev/null
+++ b/.github/workflows/publish-hugegraph-mcp.yml
@@ -0,0 +1,82 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+name: Publish HugeGraph MCP
+
+on:
+  push:
+    tags:
+      - "mcp-v*"
+
+permissions:
+  contents: read
+
+jobs:
+  build:
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v4
+
+      - uses: astral-sh/setup-uv@v6
+
+      - uses: actions/setup-python@v5
+        with:
+          python-version: "3.10"
+
+      - name: Verify release tag
+        if: github.event_name == 'push'
+        run: |
+          package_version=$(uv run --no-project python -c \
+            'import tomllib; print(tomllib.load(open("hugegraph-mcp/pyproject.toml", "rb"))["project"]["version"])')
+          test "${GITHUB_REF_NAME}" = "mcp-v${package_version}"
+
+      - name: Build distributions
+        run: uv build --directory hugegraph-mcp --out-dir dist
+
+      - name: Verify distributions
+        run: uvx --from twine twine check dist/*
+
+      - name: Verify published dependencies and console script
+        run: |
+          wheel=$(find dist -name '*.whl' -print -quit)
+          uvx --from "$wheel" hugegraph-mcp < /dev/null
+
+      - uses: actions/upload-artifact@v4
+        with:
+          name: hugegraph-mcp-distributions
+          path: dist/
+          if-no-files-found: error
+
+  publish:
+    needs: build
+    runs-on: ubuntu-latest
+    environment:
+      name: pypi-hugegraph-mcp
+      url: https://pypi.org/p/hugegraph-mcp
+    permissions:
+      id-token: write
+    steps:
+      - uses: actions/download-artifact@v4
+        with:
+          name: hugegraph-mcp-distributions
+          path: dist/
+
+      - uses: pypa/gh-action-pypi-publish@release/v1
+        with:
+          packages-dir: dist/
diff --git a/.github/workflows/publish-hugegraph-python-client.yml b/.github/workflows/publish-hugegraph-python-client.yml
new file mode 100644
index 00000000..4ae67479
--- /dev/null
+++ b/.github/workflows/publish-hugegraph-python-client.yml
@@ -0,0 +1,76 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+name: Publish HugeGraph Python Client
+
+on:
+  push:
+    tags:
+      - "client-v*"
+
+permissions:
+  contents: read
+
+jobs:
+  build:
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v4
+
+      - uses: astral-sh/setup-uv@v6
+
+      - uses: actions/setup-python@v5
+        with:
+          python-version: "3.10"
+
+      - name: Verify release tag
+        run: |
+          package_version=$(uv run --no-project python -c \
+            'import tomllib; print(tomllib.load(open("hugegraph-python-client/pyproject.toml", "rb"))["project"]["version"])')
+          test "${GITHUB_REF_NAME}" = "client-v${package_version}"
+
+      - name: Build distributions
+        run: uv build --package hugegraph-python-client --out-dir dist
+
+      - name: Verify distributions
+        run: uvx --from twine twine check dist/*
+
+      - uses: actions/upload-artifact@v4
+        with:
+          name: hugegraph-python-client-distributions
+          path: dist/
+          if-no-files-found: error
+
+  publish:
+    needs: build
+    runs-on: ubuntu-latest
+    environment:
+      name: pypi-hugegraph-python-client
+      url: https://pypi.org/p/hugegraph-python-client
+    permissions:
+      id-token: write
+    steps:
+      - uses: actions/download-artifact@v4
+        with:
+          name: hugegraph-python-client-distributions
+          path: dist/
+
+      - uses: pypa/gh-action-pypi-publish@release/v1
+        with:
+          packages-dir: dist/
diff --git a/.github/workflows/ruff.yml b/.github/workflows/ruff.yml
index da3c3172..8917b992 100644
--- a/.github/workflows/ruff.yml
+++ b/.github/workflows/ruff.yml
@@ -40,7 +40,7 @@ jobs:
 
       - name: Install dev dependencies
         run: |
-          uv sync --extra dev
+          uv sync --extra dev --extra llm --extra python-client
 
       - name: Check code formatting with Ruff
         run: |
@@ -49,3 +49,43 @@ jobs:
       - name: Lint code with Ruff
         run: |
           uv run ruff check .
+
+  ty-check:
+    runs-on: ubuntu-latest
+    strategy:
+      matrix:
+        python-version: ["3.10", "3.11"]   # hugegraph-llm requires <3.12
+
+    steps:
+      - uses: actions/checkout@v4
+
+      - name: Setup Python ${{ matrix.python-version }}
+        uses: actions/setup-python@v5
+        with:
+          python-version: ${{ matrix.python-version }}
+
+      - name: Install uv
+        run: |
+          curl -LsSf https://astral.sh/uv/install.sh | sh
+          echo "$HOME/.cargo/bin" >> $GITHUB_PATH
+
+      - name: Cache dependencies
+        id: cache-deps
+        uses: actions/cache@v4
+        with:
+          path: |
+            ~/.cache/uv
+            ~/.cache/pip
+          key: ${{ runner.os }}-uv-${{ matrix.python-version }}-${{ hashFiles('**/pyproject.toml') }}
+          restore-keys: |
+            ${{ runner.os }}-uv-${{ matrix.python-version }}-
+
+      - name: Install dev + runtime extras
+        run: |
+          uv sync --extra dev --extra llm --extra python-client
+
+      - name: Type check with ty (non-blocking)
+        run: uv run ty check hugegraph-llm/src hugegraph-python-client/src
+        continue-on-error: true
+        # TODO: extend scope to hugegraph-ml once heavy optional deps (DGL, PyTorch) are handled
+        # TODO: add graph-mcp after its type-check baseline is established
diff --git a/README.md b/README.md
index 01864245..3329cba7 100644
--- a/README.md
+++ b/README.md
@@ -22,7 +22,7 @@
 
 - Python 3.10+ (required for hugegraph-llm)
 - [uv](https://docs.astral.sh/uv/) 0.7+ (required for workspace management)
-- HugeGraph Server 1.3+ (1.5+ recommended)
+- HugeGraph Server 1.3+ for the LLM/client modules (1.5+ recommended); `hugegraph-mcp` requires 1.7.0+
 - Docker (optional, for containerized deployment)
 
 ### Option 1: Docker Deployment (Recommended)
@@ -44,6 +44,11 @@ docker compose -f docker-compose-network.yml up -d
 # - RAG Service: http://localhost:8001
 ```
 
+The RAG service is published on the host port by default, and the HTTP API is unauthenticated by default. Before
+using this deployment outside a trusted local environment, either enable the built-in Bearer authentication with
+`ENABLE_LOGIN=true` and a strong, non-default `USER_TOKEN`, or configure reverse proxy authentication. Also restrict
+access with a firewall or trusted network.
+
 ### Option 2: Source Installation
 
 ```bash
@@ -59,6 +64,7 @@ cd hugegraph-ai
 # NOTE: If download is slow, uncomment mirror lines in pyproject.toml or use: uv config --global index.url https://pypi.tuna.tsinghua.edu.cn/simple
 # Or create local uv.toml with mirror settings to avoid git diff (see uv.toml example in root)
 uv sync --extra llm  # Install LLM-specific dependencies
+# For HugeGraph MCP source development, install its standalone package directly.
 # Or install all optional dependencies: uv sync --all-extras
 
 # 4. Activate virtual environment (recommended for easier commands)
@@ -70,6 +76,8 @@ python -m hugegraph_llm.demo.rag_demo.app
 # Visit http://127.0.0.1:8001
 ```
 
+The source launcher binds to `127.0.0.1` by default and warns when a non-loopback `--host` is selected.
+
 ### Basic Usage Examples
 
 > [!NOTE]
@@ -98,6 +106,14 @@ Large language model integration for graph applications:
 - **Natural Language Interface**: Query graphs using natural language
 - **AI Agents**: Intelligent graph analysis and reasoning
 
+### [hugegraph-mcp](./hugegraph-mcp)
+
+Model Context Protocol server for safe, controlled HugeGraph access:
+
+- **Stable Tool Contract**: Typed graph, schema, Gremlin, and extraction tools for MCP clients
+- **Safe Writes**: Read-only defaults plus dry-run, persistent single-use confirmation, and target revalidation
+- **Compatibility**: Default `v2_core` toolset with an opt-in `v1` compatibility mode
+
 ### [hugegraph-ml](./hugegraph-ml)
 
 Graph machine learning with 20+ implemented algorithms:
diff --git a/hugegraph-llm/README.md b/hugegraph-llm/README.md
index 7cae74c5..9da9bf96 100644
--- a/hugegraph-llm/README.md
+++ b/hugegraph-llm/README.md
@@ -60,6 +60,8 @@ docker-compose -f docker-compose-network.yml ps
 # RAG Service: http://localhost:8001
 ```
 
+The Compose configuration publishes the RAG service only on the host loopback interface by default.
+
 ### Option 2: Individual Docker Containers
 
 For more control over individual components:
@@ -80,7 +82,7 @@ docker run -itd --name=server -p 8080:8080 --network hugegraph-net hugegraph/hug
 docker pull hugegraph/rag:latest
 docker run -itd --name rag \
   -v /path/to/your/hugegraph-llm/.env:/home/work/hugegraph-llm/.env \
-  -p 8001:8001 --network hugegraph-net hugegraph/rag
+  -p 127.0.0.1:8001:8001 --network hugegraph-net hugegraph/rag
 
 # 4. Monitor logs
 docker logs -f rag
@@ -117,6 +119,12 @@ python -m hugegraph_llm.demo.rag_demo.app
 python -m hugegraph_llm.demo.rag_demo.app --host 127.0.0.1 --port 18001
 ```
 
+The Docker deployment publishes the RAG service on the host port by default, and the HTTP API is unauthenticated by
+default. Before using this deployment outside a trusted local environment, either enable the built-in Bearer
+authentication with `ENABLE_LOGIN=true` and a strong, non-default `USER_TOKEN`, or configure reverse proxy
+authentication. Also restrict access with a firewall or trusted network. The source launcher can still be bound to
+loopback explicitly with `--host 127.0.0.1`.
+
 #### Additional Setup (Optional)
 
 > [!NOTE]
@@ -181,6 +189,16 @@ The system supports both English and Chinese prompts. To switch languages:
 > [!NOTE]
 > Configuration changes are automatically saved when using the web interface. For manual changes, simply refresh the page to load updates.
 
+### Legacy Thin API writes
+
+The compatibility endpoints `POST /graph-import` and
+`POST /vid-embeddings/refresh` are disabled by default. They are intended only
+for authenticated internal callers. To enable them, set `ENABLE_LOGIN=true`,
+replace the default `USER_TOKEN=4321` with a strong random secret, and set
+`HUGEGRAPH_LLM_ENABLE_THIN_WRITES=true`. Send the configured `USER_TOKEN` as a
+Bearer token. Prefer the HugeGraph MCP guarded write tools for user-facing
+workflows.
+
 **LLM Provider Support**: This project uses [LiteLLM](https://docs.litellm.ai/docs/providers) for multi-provider LLM support.
 
 ### Programmatic Examples (new workflow engine)
diff --git a/hugegraph-mcp/README.md b/hugegraph-mcp/README.md
index 90ed2e73..4398bcb2 100644
--- a/hugegraph-mcp/README.md
+++ b/hugegraph-mcp/README.md
@@ -8,18 +8,16 @@ HugeGraph MCP is a Model Context Protocol server for HugeGraph. It is designed a
 
 ## Quick Start
 
-Install [uv](https://docs.astral.sh/uv/getting-started/installation/) if it is not already available. Then, from the repository root, install the MCP extra and start the stdio server:
+Install [uv](https://docs.astral.sh/uv/getting-started/installation/), set the connection variables, and run HugeGraph MCP with `uvx`. Replace `hugegraph.example.com` with your HugeGraph Server host:
 
 ```bash
-uv sync --extra mcp --extra dev
-
-export HUGEGRAPH_URL=http://127.0.0.1:8080
+export HUGEGRAPH_URL=http://hugegraph.example.com:8080
 export HUGEGRAPH_GRAPH_PATH=DEFAULT/hugegraph
 export HUGEGRAPH_USER=admin
 export HUGEGRAPH_PASSWORD=admin
 export HUGEGRAPH_MCP_READONLY=true
 
-uv run --project hugegraph-mcp hugegraph-mcp
+uvx --from hugegraph-mcp==1.7.0 hugegraph-mcp
 ```
 
 The process speaks MCP JSON-RPC on stdout; connect it from an MCP client. Keep
@@ -27,8 +25,38 @@ The process speaks MCP JSON-RPC on stdout; connect it from an MCP client. Keep
 plan. The default toolset is `v2_core`; set `HUGEGRAPH_MCP_TOOLSET=v1` before
 startup when an older client requires the 10-tool compatibility contract.
 
+For MCP clients that accept JSON server configuration, use `uvx` as the command:
+
+```json
+{
+  "mcpServers": {
+    "hugegraph": {
+      "command": "uvx",
+      "args": ["--from", "hugegraph-mcp==1.7.0", "hugegraph-mcp"],
+      "env": {
+        "HUGEGRAPH_URL": "http://hugegraph.example.com:8080",
+        "HUGEGRAPH_GRAPH_PATH": "DEFAULT/hugegraph",
+        "HUGEGRAPH_USER": "admin",
+        "HUGEGRAPH_PASSWORD": "admin",
+        "HUGEGRAPH_MCP_READONLY": "true"
+      }
+    }
+  }
+}
+```
+
 ## Developer Notes
 
+### Run from Source
+
+From the repository root:
+
+```bash
+uv venv
+uv pip install -e ../hugegraph-python-client -e .
+uv run --project hugegraph-mcp hugegraph-mcp
+```
+
 ### Design Boundary
 
 HugeGraph MCP does not turn MCP into a second business kernel. The MCP layer is responsible for:
diff --git a/hugegraph-mcp/README.zh-CN.md b/hugegraph-mcp/README.zh-CN.md
index 6ad6d040..15e5a87c 100644
--- a/hugegraph-mcp/README.zh-CN.md
+++ b/hugegraph-mcp/README.zh-CN.md
@@ -8,26 +8,54 @@ HugeGraph MCP 是 HugeGraph 的 Model Context Protocol Server。它的定位是
 
 ## 快速开始
 
-如果尚未安装,请先安装 [uv](https://docs.astral.sh/uv/getting-started/installation/)。然后,在仓库根目录安装 MCP 依赖并启动 stdio server:
+请先安装 [uv](https://docs.astral.sh/uv/getting-started/installation/),设置连接变量后通过 `uvx` 运行 HugeGraph MCP。请将 `hugegraph.example.com` 替换为实际的 HugeGraph Server 主机名:
 
 ```bash
-uv sync --extra mcp --extra dev
-
-export HUGEGRAPH_URL=http://127.0.0.1:8080
+export HUGEGRAPH_URL=http://hugegraph.example.com:8080
 export HUGEGRAPH_GRAPH_PATH=DEFAULT/hugegraph
 export HUGEGRAPH_USER=admin
 export HUGEGRAPH_PASSWORD=admin
 export HUGEGRAPH_MCP_READONLY=true
 
-uv run --project hugegraph-mcp hugegraph-mcp
+uvx --from hugegraph-mcp==1.7.0 hugegraph-mcp
 ```
 
 进程通过 stdout 输出 MCP JSON-RPC,请由 MCP 客户端连接。除非已经有明确的写入验证计划,否则保持
 `HUGEGRAPH_MCP_READONLY=true`。默认工具集是 `v2_core`;旧客户端需要 10 工具兼容契约时,在启动前设置
 `HUGEGRAPH_MCP_TOOLSET=v1`。
 
+对于支持 JSON Server 配置的 MCP 客户端,可使用 `uvx` 作为启动命令:
+
+```json
+{
+  "mcpServers": {
+    "hugegraph": {
+      "command": "uvx",
+      "args": ["--from", "hugegraph-mcp==1.7.0", "hugegraph-mcp"],
+      "env": {
+        "HUGEGRAPH_URL": "http://hugegraph.example.com:8080",
+        "HUGEGRAPH_GRAPH_PATH": "DEFAULT/hugegraph",
+        "HUGEGRAPH_USER": "admin",
+        "HUGEGRAPH_PASSWORD": "admin",
+        "HUGEGRAPH_MCP_READONLY": "true"
+      }
+    }
+  }
+}
+```
+
 ## 开发者说明
 
+### 从源码运行
+
+在仓库根目录执行:
+
+```bash
+uv venv
+uv pip install -e ../hugegraph-python-client -e .
+uv run --project hugegraph-mcp hugegraph-mcp
+```
+
 ### 设计边界
 
 HugeGraph MCP 不把 MCP 做成另一套业务内核。MCP 层负责:
diff --git a/hugegraph-mcp/docs/releasing.md b/hugegraph-mcp/docs/releasing.md
new file mode 100644
index 00000000..b30d4399
--- /dev/null
+++ b/hugegraph-mcp/docs/releasing.md
@@ -0,0 +1,32 @@
+# Publishing HugeGraph MCP
+
+HugeGraph MCP is distributed from PyPI and launched with `uvx`. It depends on
+`hugegraph-python-client`, so release the client before the MCP package.
+
+## Repository Setup
+
+Configure PyPI Trusted Publishers for these GitHub environments and workflows:
+
+| PyPI project | GitHub environment | Workflow |
+| --- | --- | --- |
+| `hugegraph-python-client` | `pypi-hugegraph-python-client` | `publish-hugegraph-python-client.yml` |
+| `hugegraph-mcp` | `pypi-hugegraph-mcp` | `publish-hugegraph-mcp.yml` |
+
+Require reviewer approval on both GitHub environments. The workflows request
+short-lived OIDC credentials and do not use long-lived PyPI API tokens.
+
+## Release Order
+
+1. Update and verify the versions in both package `pyproject.toml` files.
+2. Publish the client by pushing `client-v<version>`, for example
+   `client-v1.7.0`.
+3. Confirm that the client version is available from PyPI.
+4. Publish MCP by pushing `mcp-v<version>`, for example `mcp-v1.7.0`.
+5. Verify the public installation:
+
+   ```bash
+   uvx --from hugegraph-mcp==1.7.0 hugegraph-mcp
+   ```
+
+The MCP build job resolves its wheel only against published dependencies, so it
+stops before upload when the required client release is unavailable.
diff --git a/hugegraph-mcp/pyproject.toml b/hugegraph-mcp/pyproject.toml
index 8e02f9b5..6e627516 100644
--- a/hugegraph-mcp/pyproject.toml
+++ b/hugegraph-mcp/pyproject.toml
@@ -13,19 +13,36 @@
 
 [project]
 name = "hugegraph-mcp"
-version = "0.1.0"
+version = "1.7.0"
 description = "FastMCP server that exposes HugeGraph schema & Gremlin tools over MCP/STDIO"
 readme = "README.md"
 license = { text = "Apache-2.0" }
+keywords = ["hugegraph", "mcp", "model-context-protocol", "gremlin"]
+classifiers = [
+    "Development Status :: 4 - Beta",
+    "Intended Audience :: Developers",
+    "License :: OSI Approved :: Apache Software License",
+    "Programming Language :: Python :: 3",
+    "Programming Language :: Python :: 3.10",
+    "Programming Language :: Python :: 3.11",
+    "Programming Language :: Python :: 3.12",
+    "Topic :: Software Development :: Libraries :: Python Modules",
+]
 requires-python = ">=3.10"
 authors = [
     { name = "Apache HugeGraph Contributors", email = "dev@hugegraph.apache.org" },
 ]
 
 dependencies = [
-    "fastmcp>=2.2.0",
-    "hugegraph-python-client>=1.7.0",
+    "fastmcp==3.2.4",
+    "hugegraph-python-client>=1.7.0,<2",
 ]
+
+[project.urls]
+Homepage = "https://hugegraph.apache.org/"
+Repository = "https://github.com/apache/hugegraph-ai"
+Issues = "https://github.com/apache/hugegraph-ai/issues"
+
 [project.scripts]
 hugegraph-mcp = "hugegraph_mcp.server:main"
 
@@ -39,9 +56,6 @@ packages = ["hugegraph_mcp"]
 [tool.hatch.metadata]
 allow-direct-references = true
 
-[tool.uv.sources]
-hugegraph-python-client = { workspace = true }
-
 [tool.ruff.lint.per-file-ignores]
 # server.py must patch os.makedirs before importing pyhugegraph (which creates logs at import time)
 "hugegraph_mcp/server.py" = ["E402"]
diff --git a/hugegraph-ml/src/hugegraph_ml/examples/seal_example.py b/hugegraph-ml/src/hugegraph_ml/examples/seal_example.py
index 2e292a98..8bcfe1b2 100644
--- a/hugegraph-ml/src/hugegraph_ml/examples/seal_example.py
+++ b/hugegraph-ml/src/hugegraph_ml/examples/seal_example.py
@@ -46,8 +46,9 @@ def seal_example(n_epochs=200):
     link_pre_task = LinkPredictionSeal(graph, split_edge, model)
     link_pre_task.train(lr=0.005, n_epochs=n_epochs)
 
-    # 在训练结束后,最后一个epoch的评估结果已经在train方法中计算并存储在summary_test中
-    # 这里我们可以简单地打印一条消息,表示训练已完成
+    # After training, the final epoch's evaluation is calculated by train and
+    # stored in summary_test.
+    # Print a message indicating that training is complete.
     print("Training completed. Evaluation metrics were calculated during training.")
 
 
diff --git a/pyproject.toml b/pyproject.toml
index 11d006b0..dea0bc21 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -36,7 +36,6 @@ dependencies = [
 
 [project.optional-dependencies]
 llm = ["hugegraph-llm"]
-mcp = ["hugegraph-mcp"]
 ml = ["hugegraph-ml"]
 python-client = ["hugegraph-python"]
 vermeer = ["vermeer-python-client"]
@@ -52,7 +51,7 @@ dev = [
 ]
 
 nk-llm = ["hugegraph-llm", "hugegraph-python", "nuitka"]
-all = ["hugegraph-python", "hugegraph-llm", "hugegraph-mcp", "hugegraph-ml", "vermeer-python-client"]
+all = ["hugegraph-python", "hugegraph-llm", "hugegraph-ml", "vermeer-python-client"]
 
 [project.urls]
 homepage = "https://hugegraph.apache.org/"
@@ -87,7 +86,6 @@ include = ["*/src", "README.md", "LICENSE", "NOTICE"]
 
 [tool.uv.sources]
 hugegraph-llm = { workspace = true }
-hugegraph-mcp = { workspace = true }
 hugegraph-python = { workspace = true }
 hugegraph-ml = { path = "hugegraph-ml", editable = true }
 vermeer-python-client = { path = "vermeer-python-client", editable = true }
@@ -95,7 +93,6 @@ vermeer-python-client = { path = "vermeer-python-client", editable = true }
 [tool.uv.workspace]
 members = [
     "hugegraph-llm",
-    "hugegraph-mcp",
     "hugegraph-python-client"
 ]
 
diff --git a/skills/hugegraph-data-importer/SKILL.md b/skills/hugegraph-data-importer/SKILL.md
new file mode 100644
index 00000000..eb80519f
--- /dev/null
+++ b/skills/hugegraph-data-importer/SKILL.md
@@ -0,0 +1,46 @@
+---
+name: hugegraph-data-importer
+description: Route HugeGraph MCP graph data extraction and controlled import/delete tasks to stable public tools. Use when the user asks to extract graph data from text, import structured vertices or edges, verify an import, or asks whether table, SQL, update, or delete graph writes are available.
+---
+
+# HugeGraph Data Importer
+
+## Tool Routes
+
+| Goal | Tool |
+| --- | --- |
+| Inspect schema, primary keys, or edge endpoints | `inspect_graph_tool(include_raw_schema=true)` |
+| Extract candidate graph data from text | `extract_graph_data_tool(text, graph_schema?, example_prompt?)` |
+| Preview structured vertex/edge import | `import_graph_data_tool(mode="ingest", graph_data, dry_run=true)` |
+| Execute confirmed import | `import_graph_data_tool(mode="ingest", graph_data, dry_run=false, confirm=true, plan_hash, nonce, expires_at)` |
+| Preview controlled vertex/edge delete | `delete_graph_data_tool(change_plan, dry_run=true)` |
+| Execute confirmed controlled delete | `delete_graph_data_tool(change_plan, dry_run=false, confirm=true, plan_hash, nonce, expires_at)` |
+| Verify imported data | `execute_gremlin_read_tool(gremlin_query)` |
+
+`change_plan` must contain exact operations. For example, a vertex delete is:
+
+```json
+{"operations":[{"op":"delete_vertex","label":"person","match":{"name":"Alice"}}]}
+```
+
+Edge deletion uses `op: "delete_edge"`, `label`, `source_label`,
+`source_match`, `target_label`, and `target_match`. Each operation must resolve
+to exactly one target during dry-run; bulk and cascade deletes are not supported.
+
+## Order
+
+```text
+inspect_graph_tool -> extract_graph_data_tool or prepare graph_data
+-> import_graph_data_tool(dry_run=true)
+-> import_graph_data_tool(dry_run=false, confirm=true, plan_hash, nonce, expires_at)
+-> execute_gremlin_read_tool
+```
+
+For controlled deletes:
+
+```text
+inspect_graph_tool(include_raw_schema=true)
+-> delete_graph_data_tool(dry_run=true)
+-> delete_graph_data_tool(dry_run=false, confirm=true, plan_hash, nonce, expires_at)
+-> execute_gremlin_read_tool
+```
diff --git a/skills/hugegraph-data-importer/agents/openai.yaml b/skills/hugegraph-data-importer/agents/openai.yaml
new file mode 100644
index 00000000..74146a19
--- /dev/null
+++ b/skills/hugegraph-data-importer/agents/openai.yaml
@@ -0,0 +1,21 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+interface:
+  display_name: "HugeGraph Data Importer"
+  short_description: "Extract and import graph data safely"
+  default_prompt: "Use $hugegraph-data-importer to extract or import HugeGraph data through the current MCP V1 safe path."
diff --git a/skills/hugegraph-operator/SKILL.md b/skills/hugegraph-operator/SKILL.md
new file mode 100644
index 00000000..e33280d5
--- /dev/null
+++ b/skills/hugegraph-operator/SKILL.md
@@ -0,0 +1,32 @@
+---
+name: hugegraph-operator
+description: Route HugeGraph MCP operational checks to status, schema, permission, AI availability, and read-only verification tools. Use when the user asks to check the current graph, schema, MCP connection, readonly state, HugeGraph-AI state, counts, indexes, or readiness.
+---
+
+# HugeGraph Operator
+
+## Tool Routes
+
+| Goal | Tool |
+| --- | --- |
+| Quick check connection, status, permissions, counts | `inspect_graph_tool(include_raw_schema=false)` |
+| Inspect full schema, primary keys, indexes, edge endpoints | `inspect_graph_tool(include_raw_schema=true)` |
+| Check readonly, graph, or graphspace | `inspect_graph_tool(include_raw_schema=false)` |
+| Verify whether graph data exists | `execute_gremlin_read_tool(gremlin_query)` |
+| Get schema context before query | `inspect_graph_tool(include_raw_schema=true)` |
+| Check schema before import | `inspect_graph_tool(include_raw_schema=true)` |
+| Check schema before schema design | `inspect_graph_tool(include_raw_schema=true)` |
+| Check AI generation readiness | `inspect_graph_tool(include_raw_schema=false)`, then optionally `generate_gremlin_tool(query, execute=false)` |
+
+`inspect_graph_tool` reports `hugegraph_ai_status`, but does not expose the
+`HUGEGRAPH_MCP_ALLOW_AI` or `HUGEGRAPH_MCP_ADMIN_MODE` configuration values.
+Check those environment variables in the server process when diagnosing a
+disabled AI call or an admin-gated tool.
+
+## Order
+
+```text
+Status check: inspect_graph_tool
+Schema audit: inspect_graph_tool(include_raw_schema=true)
+Data verification: inspect_graph_tool -> execute_gremlin_read_tool
+```
diff --git a/skills/hugegraph-operator/agents/openai.yaml b/skills/hugegraph-operator/agents/openai.yaml
new file mode 100644
index 00000000..9e7099e6
--- /dev/null
+++ b/skills/hugegraph-operator/agents/openai.yaml
@@ -0,0 +1,21 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+interface:
+  display_name: "HugeGraph Operator"
+  short_description: "Inspect graph status and schema"
+  default_prompt: "Use $hugegraph-operator to check the current HugeGraph MCP status, schema, permissions, and next actions."
diff --git a/skills/hugegraph-query-analyst/SKILL.md b/skills/hugegraph-query-analyst/SKILL.md
new file mode 100644
index 00000000..f55f18b5
--- /dev/null
+++ b/skills/hugegraph-query-analyst/SKILL.md
@@ -0,0 +1,25 @@
+---
+name: hugegraph-query-analyst
+description: Route HugeGraph MCP V1 graph query tasks to stable read-only tools. Use when the user asks graph questions, asks to generate Gremlin, provides Gremlin to execute safely, or needs read-only graph exploration.
+---
+
+# HugeGraph Query Analyst
+
+## Tool Routes
+
+| Goal | Tool |
+| --- | --- |
+| Inspect schema, labels, properties, or edge directions | `inspect_graph_tool(include_raw_schema=false)` or `inspect_graph_tool(include_raw_schema=true)` |
+| Generate Gremlin from natural language | `generate_gremlin_tool(query, execute=false)` |
+| Answer a natural-language graph question | `generate_gremlin_tool(query, execute=false)` -> `execute_gremlin_read_tool(gremlin_query)` |
+| Execute user-provided Gremlin | `execute_gremlin_read_tool(gremlin_query)` |
+| Generate only, without execution | `generate_gremlin_tool(query, execute=false)` |
+
+
+## Order
+
+```text
+Need schema: inspect_graph_tool
+Natural-language query: generate_gremlin_tool -> execute_gremlin_read_tool
+Existing Gremlin: execute_gremlin_read_tool
+```
diff --git a/skills/hugegraph-query-analyst/agents/openai.yaml b/skills/hugegraph-query-analyst/agents/openai.yaml
new file mode 100644
index 00000000..a6fdd291
--- /dev/null
+++ b/skills/hugegraph-query-analyst/agents/openai.yaml
@@ -0,0 +1,21 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+interface:
+  display_name: "HugeGraph Query Analyst"
+  short_description: "Query graphs with read-only MCP"
+  default_prompt: "Use $hugegraph-query-analyst to answer this graph question through MCP read-only query tools."
diff --git a/skills/hugegraph-regression-tester/SKILL.md b/skills/hugegraph-regression-tester/SKILL.md
new file mode 100644
index 00000000..476fc2b8
--- /dev/null
+++ b/skills/hugegraph-regression-tester/SKILL.md
@@ -0,0 +1,32 @@
+---
+name: hugegraph-regression-tester
+description: Route HugeGraph MCP V1 regression testing tasks to the current public tool surface, including inspection, read-only queries, Gremlin generation, extraction, controlled import, schema validate/dry-run, safety guards, and admin-gated tool checks.
+---
+
+# HugeGraph Regression Tester
+
+## Tool Routes
+
+| Test goal | Tool |
+| --- | --- |
+| MCP, graph status, or schema | `inspect_graph_tool(include_raw_schema=false)` and when needed `inspect_graph_tool(include_raw_schema=true)` |
+| Read-only Gremlin query | `execute_gremlin_read_tool(gremlin_query)` |
+| Natural-language Gremlin generation | `generate_gremlin_tool(query, execute=false)` |
+| Generate then execute read query | `generate_gremlin_tool(query, execute=false)` -> `execute_gremlin_read_tool(gremlin_query)` |
+| Write Gremlin rejection | `execute_gremlin_read_tool(unsafe_write_query)` |
+| Text-to-graph extraction | `extract_graph_data_tool(text, graph_schema?, example_prompt?)` |
+| Import dry-run | `import_graph_data_tool(mode="ingest", graph_data, dry_run=true)` |
+| Import confirm | `import_graph_data_tool(mode="ingest", graph_data, dry_run=false, confirm=true, plan_hash, nonce, expires_at)` |
+| Verify import | `execute_gremlin_read_tool(gremlin_query)` |
+| Schema design | `design_schema_tool(operations?)` |
+| Schema validation | `apply_schema_tool(mode="validate", operations)` |
+| Schema dry-run | `apply_schema_tool(mode="dry_run", operations)` |
+| Admin write-tool gate check | `execute_gremlin_write_tool(gremlin_query)` |
+| VID refresh gate check | `refresh_vid_embeddings_tool(confirm=false)` |
+
+## Order
+
+```text
+inspect -> generate/read -> extract -> import dry-run -> import confirm
+-> verify read -> schema validate/dry-run -> safety/gate checks
+```
diff --git a/skills/hugegraph-regression-tester/agents/openai.yaml b/skills/hugegraph-regression-tester/agents/openai.yaml
new file mode 100644
index 00000000..6f87cff0
--- /dev/null
+++ b/skills/hugegraph-regression-tester/agents/openai.yaml
@@ -0,0 +1,21 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+interface:
+  display_name: "HugeGraph Regression Tester"
+  short_description: "Test current MCP V1 capabilities"
+  default_prompt: "Use $hugegraph-regression-tester to run a real HugeGraph MCP V1 regression test and report pass/fail results."
diff --git a/skills/hugegraph-schema-designer/SKILL.md b/skills/hugegraph-schema-designer/SKILL.md
new file mode 100644
index 00000000..5a40656d
--- /dev/null
+++ b/skills/hugegraph-schema-designer/SKILL.md
@@ -0,0 +1,35 @@
+---
+name: hugegraph-schema-designer
+description: Route HugeGraph MCP schema design, validation, and dry-run preview tasks to stable public tools. Use when the user asks to design vertex labels, edge labels, properties, primary keys, indexes, or preview schema operations.
+---
+
+# HugeGraph Schema Designer
+
+## Tool Routes
+
+| Goal | Tool |
+| --- | --- |
+| Inspect current schema | `inspect_graph_tool(include_raw_schema=true)` |
+| Design schema operations | `design_schema_tool(operations?)` |
+| Validate schema operations | `apply_schema_tool(mode="validate", operations)` |
+| Dry-run schema operations | `apply_schema_tool(mode="dry_run", operations)` |
+| Execute real schema apply | `apply_schema_tool(mode="apply", operations, confirm=true, plan_hash, nonce, expires_at)` in default `v2_core` for create-only P0a operations |
+| Delete or roll back schema | No V1 stable tool |
+
+The default `v2_core` toolset permits confirmed apply only for
+`create_property_key`, `create_vertex_label`, and `create_edge_label`. In
+`HUGEGRAPH_MCP_TOOLSET=v1`, real schema apply remains disabled.
+
+Review the dry-run response before applying it. The confirmed call must resend
+the same `operations` and use the `plan_hash`, `nonce`, and `expires_at` issued
+by that dry-run.
+
+## Order
+
+```text
+inspect_graph_tool -> design_schema_tool
+-> apply_schema_tool(mode="validate")
+-> apply_schema_tool(mode="dry_run")
+-> review operations and preview
+-> apply_schema_tool(mode="apply", confirm=true, plan_hash, nonce, expires_at)
+```
diff --git a/skills/hugegraph-schema-designer/agents/openai.yaml b/skills/hugegraph-schema-designer/agents/openai.yaml
new file mode 100644
index 00000000..37c3b171
--- /dev/null
+++ b/skills/hugegraph-schema-designer/agents/openai.yaml
@@ -0,0 +1,21 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+interface:
+  display_name: "HugeGraph Schema Designer"
+  short_description: "Design and preview graph schema"
+  default_prompt: "Use $hugegraph-schema-designer to design and dry-run preview a HugeGraph schema plan."