Skip to content

Commit 58d550d

Browse files
luarssclaude
andcommitted
feat: add MCP registry publishing to release pipeline
- Add server.json manifest for MCP server registry - Add publish-mcp-registry job with jq-based version bumping - Add Docker latest tag push alongside version tag - Add empty changelog guard for GitHub releases - Add mcp-name marker and registry section to README - Add MCP server name LABEL to Dockerfile Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 9063f8d commit 58d550d

5 files changed

Lines changed: 75 additions & 0 deletions

File tree

.github/workflows/docker-publish.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,6 @@ jobs:
3535
run: |
3636
ORFS_VER=$(make --no-print-directory print-ORFS_VERSION)
3737
docker tag ghcr.io/luarss/openroad-mcp:$ORFS_VER ghcr.io/luarss/openroad-mcp:"$IMAGE_TAG"
38+
docker tag ghcr.io/luarss/openroad-mcp:$ORFS_VER ghcr.io/luarss/openroad-mcp:latest
3839
docker push ghcr.io/luarss/openroad-mcp:"$IMAGE_TAG"
40+
docker push ghcr.io/luarss/openroad-mcp:latest

.github/workflows/release.yml

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,10 @@ jobs:
7676
VERSION="${GITHUB_REF_NAME#v}"
7777
# Extract the section for this version from CHANGELOG.md
7878
NOTES=$(awk "/^## \[$VERSION\]/{found=1; next} found && /^## /{exit} found{print}" CHANGELOG.md)
79+
if [ -z "$NOTES" ]; then
80+
echo "::warning::No changelog entry found for version $VERSION"
81+
NOTES="Release $VERSION"
82+
fi
7983
echo "notes<<EOF" >> $GITHUB_OUTPUT
8084
echo "$NOTES" >> $GITHUB_OUTPUT
8185
echo "EOF" >> $GITHUB_OUTPUT
@@ -101,3 +105,31 @@ jobs:
101105
with:
102106
image_tag: ${{ github.ref_name }}
103107
secrets: inherit
108+
109+
publish-mcp-registry:
110+
name: Publish to MCP Registry
111+
needs: [publish-pypi, publish-docker]
112+
runs-on: ubuntu-latest
113+
permissions:
114+
id-token: write
115+
contents: read
116+
steps:
117+
- uses: actions/checkout@v4
118+
119+
- name: Install mcp-publisher
120+
run: |
121+
curl -L "https://github.com/modelcontextprotocol/registry/releases/latest/download/mcp-publisher_$(uname -s | tr '[:upper:]' '[:lower:]')_$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/').tar.gz" | tar xz mcp-publisher
122+
123+
- name: Authenticate to MCP Registry
124+
run: ./mcp-publisher login github-oidc
125+
126+
- name: Install jq
127+
run: sudo apt-get update -qq && sudo apt-get install -qq -y jq
128+
129+
- name: Update version in server.json
130+
run: |
131+
VERSION="${GITHUB_REF_NAME#v}"
132+
jq --arg v "$VERSION" '.version = $v | (.packages[].version) = $v' server.json > server.json.tmp && mv server.json.tmp server.json
133+
134+
- name: Publish to MCP Registry
135+
run: ./mcp-publisher publish

Dockerfile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ WORKDIR /app
3535
COPY --from=builder --chown=appuser:appuser /app/.venv /app/.venv
3636
COPY --from=builder --chown=appuser:appuser /opt/python /opt/python
3737

38+
LABEL io.modelcontextprotocol.server.name=io.github.luarss/openroad-mcp
39+
3840
USER appuser
3941

4042
ENV PATH="/app/.venv/bin:/OpenROAD-flow-scripts/tools/install/OpenROAD/bin:/OpenROAD-flow-scripts/tools/install/yosys/bin:$PATH" \

README.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# OpenROAD MCP Server
22

3+
<!-- mcp-name: io.github.luarss/openroad-mcp -->
4+
35
A Model Context Protocol (MCP) server that provides tools for interacting with OpenROAD and ORFS (OpenROAD Flow Scripts).
46

57
## Demo
@@ -104,6 +106,17 @@ Follow the [Gemini MCP install guide](https://ai.google.dev/gemini-api/docs/mode
104106

105107
</details>
106108

109+
<details>
110+
<summary><b>MCP Registry</b></summary>
111+
112+
Once published to the [MCP Registry](https://registry.modelcontextprotocol.io), clients can discover and install directly:
113+
114+
```bash
115+
uvx openroad-mcp
116+
```
117+
118+
</details>
119+
107120
## Verification
108121

109122
After configuration, restart your MCP client and verify the MCP server is running:

server.json

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
{
2+
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
3+
"name": "io.github.luarss/openroad-mcp",
4+
"description": "The OpenROAD MCP server - interactive EDA sessions via Model Context Protocol",
5+
"repository": {
6+
"url": "https://github.com/luarss/openroad-mcp",
7+
"source": "github"
8+
},
9+
"version": "0.3.0",
10+
"packages": [
11+
{
12+
"registryType": "pypi",
13+
"identifier": "openroad-mcp",
14+
"version": "0.3.0",
15+
"transport": { "type": "stdio" },
16+
"runtimeHint": "uvx"
17+
},
18+
{
19+
"registryType": "oci",
20+
"identifier": "ghcr.io/luarss/openroad-mcp",
21+
"version": "0.3.0",
22+
"transport": { "type": "stdio" },
23+
"runtimeHint": "docker"
24+
}
25+
]
26+
}

0 commit comments

Comments
 (0)