Skip to content

Conversation

kparkinson-ld
Copy link

@kparkinson-ld kparkinson-ld commented Sep 15, 2025

Related issues

This PR addresses the request to publish the LaunchDarkly MCP server to the Model Context Protocol registry following the guidelines at https://github.com/modelcontextprotocol/registry/blob/main/docs/guides/publishing/github-actions.md.

Describe the solution you've provided

This PR adds a new GitHub Actions workflow (.github/workflows/publish-mcp-registry.yml) that publishes the MCP server to the MCP registry. The workflow:

  • Triggers on GitHub releases (when published) or manual dispatch via workflow_dispatch
  • Uses GitHub OIDC authentication to login to the MCP registry
  • Downloads and uses the official MCP Publisher tool to submit the package
  • Focuses exclusively on MCP registry publishing (does not duplicate npm publishing)

The workflow coordinates with the existing Speakeasy publishing process by handling only MCP registry submission while leaving npm publishing to the existing sdk_publish.yaml workflow.

Describe alternatives you've considered

Alternative trigger strategies:

  • Triggering after Speakeasy workflow completion: Considered but rejected because the Speakeasy workflow doesn't create GitHub releases, making coordination difficult
  • Triggering on every npm publish: Would require complex coordination and could lead to unwanted MCP registry submissions

Alternative authentication methods:

  • API tokens: GitHub OIDC is preferred by the MCP registry guidelines for better security

Integration approaches:

  • Modifying existing Speakeasy workflow: Considered but would complicate the generated workflow and could interfere with Speakeasy's automation
  • Single unified workflow: Would duplicate npm publishing logic already handled by Speakeasy

Additional context

Important review points:

  • ⚠️ External dependency: The workflow downloads MCP Publisher from github.com/modelcontextprotocol/registry/releases/download/v1.0.0/ - verify this URL and version are stable
  • ⚠️ OIDC configuration: Requires repository to be configured for GitHub OIDC authentication with MCP registry
  • ⚠️ Untested workflow: This is a new workflow that hasn't been tested in practice
  • ⚠️ MCP registry compatibility: Assumes current repository structure meets MCP registry requirements

Workflow coordination:

  • Existing sdk_publish.yaml (Speakeasy) handles npm publishing when .speakeasy/gen.lock changes
  • This workflow handles MCP registry publishing when GitHub releases are created
  • No npm publishing duplication (removed after reviewer feedback)

Testing strategy:

  • Workflow can be tested manually using workflow_dispatch trigger
  • Recommend testing on a fork or with a dry-run approach first

Link to Devin run: https://app.devin.ai/sessions/0e8e01387d7e447ea3d82a638f30cc8f
Requested by: @kparkinson-ld (Kane Parkinson)

- Follows MCP registry publishing guidelines
- Triggers on releases and manual dispatch
- Uses existing NPM_TOKEN secret
- Publishes to npm first, then MCP registry
- Uses GitHub OIDC authentication for MCP registry

Co-Authored-By: Kane Parkinson <[email protected]>
Copy link

🤖 Devin AI Engineer

I'll be helping with this pull request! Here's what you should know:

✅ I will automatically:

  • Address comments on this PR. Add '(aside)' to your comment to have me ignore it.
  • Look at CI failures and help fix them

Note: I can only respond to comments from users who have write access to this repository.

⚙️ Control Options:

  • Disable automatic comment and CI monitoring

Comment on lines 34 to 37
- name: Publish to npm
run: npm publish
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
Copy link
Member

Choose a reason for hiding this comment

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

We already publish to npm through Speakeasy's workflows: https://github.com/launchdarkly/mcp-server/blob/main/.github/workflows/sdk_publish.yaml#L22

Why are we duplicating this step? Can we unify the current publication process and publishing to the registry?

Copy link

Good point! You're absolutely right that we shouldn't duplicate the npm publishing step. The existing Speakeasy workflow already handles npm publishing.

I'll update this workflow to focus only on the MCP registry publishing part. The workflow should either:

  1. Trigger after successful npm publishing (on releases), or
  2. Be manually triggered when we want to publish to the MCP registry

I'll remove the npm publish step and keep only the MCP registry-specific steps. This way we avoid duplication while still enabling MCP registry publishing.

- Remove Node.js setup, npm ci, build, and publish steps
- Keep only MCP registry-specific publishing steps
- Addresses reviewer feedback about Speakeasy workflow already handling npm publishing

Co-Authored-By: Kane Parkinson <[email protected]>
Copy link

Thanks for the feedback! You're absolutely right. I've updated the workflow to remove the npm publishing duplication.

The updated workflow now:

  • Focuses only on MCP registry publishing
  • Removes all npm-related steps (Node.js setup, npm ci, npm build, npm publish)
  • Keeps only the MCP registry-specific steps (install MCP Publisher, login, publish)
  • Triggers on GitHub releases or manual dispatch

This way the existing Speakeasy workflow continues to handle npm publishing when .speakeasy/gen.lock changes, and this workflow handles only the MCP registry submission when releases are created.

Copy link

@ldhenry ldhenry left a comment

Choose a reason for hiding this comment

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

Looks good. Thank you!

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

Successfully merging this pull request may close these issues.

3 participants