feat: add build script and update README for MCP Registry Publisher Tool

This commit is contained in:
Avinash Sridhar 2025-04-28 12:08:50 -04:00 • committed by Toby Padilla
commit 59adaa9aa5
3 changed files with 149 additions and 1 deletions

3
.gitignore vendored
View file

@ -1,4 +1,5 @@
build/*
data
.env
.mcpregistry*
.mcpregistry*
**/bin

106
tools/publisher/README.md Normal file
View file

@ -0,0 +1,106 @@
# MCP Registry Publisher Tool
The MCP Registry Publisher Tool is designed to publish Model Context Protocol (MCP) server details to an MCP registry. This tool currently only handles GitHub authentication via device flow and manages the publishing process.
## Building the Tool
You can build the publisher tool using the provided build script:
```bash
# Make the build script executable
chmod +x build.sh
# Build for current platform
./build.sh
# Build for all supported platforms (optional)
./build.sh --all
```
The compiled binary will be placed in the `bin` directory.
## Usage
```bash
# Basic usage
./bin/mcp-publisher --registry-url <REGISTRY_URL> --mcp-file <PATH_TO_MCP_FILE>
# Force a new login even if a token exists
./bin/mcp-publisher --registry-url <REGISTRY_URL> --mcp-file <PATH_TO_MCP_FILE> --login
```
### Command-line Arguments
- `--registry-url`: URL of the MCP registry (required)
- `--mcp-file`: Path to the MCP configuration file (required)
- `--login`: Force a new GitHub authentication even if a token already exists
## Authentication
The tool uses GitHub device flow authentication:
1. When first run (or with `--login` flag), the tool will initiate the GitHub device flow
2. You'll be provided with a URL and a code to enter
3. After successful authentication, the tool saves the token locally for future use
_NOTE_ : Authentication is made on behalf of a GitHubApp which you must install on the repository you're publishing.
## Example
1. Prepare your `mcp.json` file with your server details:
```json
{
"name": "io.github.yourusername/your-repository",
"description": "Your MCP server description",
"version_detail": {
"version": "1.0.0"
},
"registries": [
{
"name": "npm",
"package_name": "your-npm-package",
"license": "MIT",
"command_arguments": {
"sub_commands": [
{
"name": "start",
"description": "Start the server",
"named_arguments": null
}
],
"positional_arguments": null,
"environment_variables": [
{
"name": "PORT",
"description": "Port to run the server on",
"required": false
}
],
"named_arguments": null
}
}
],
"remotes": [
{
"transporttype": "http",
"url": "http://yourdomain.com/api"
}
]
}
```
2. Run the publisher tool:
```bash
./bin/mcp-publisher --registry-url "https://mcp-registry.example.com" --mcp-file "./mcp.json"
```
3. Follow the authentication instructions in the terminal if prompted.
4. Upon successful publication, you'll see a confirmation message.
## Important Notes
- The authentication token is saved in a file named `.mcpregistry_token` in the current directory
- The tool requires an active internet connection to authenticate with GitHub and communicate with the registry
- Make sure the repository and package mentioned in your `mcp.json` file exist and are accessible

41
tools/publisher/build.sh Executable file
View file

@ -0,0 +1,41 @@
#!/bin/bash
# Build script for MCP Registry Publisher Tool
# Set variables
OUTPUT_DIR="./bin"
BINARY_NAME="mcp-publisher"
# Create output directory if it doesn't exist
mkdir -p $OUTPUT_DIR
# Print build information
echo "Building MCP Registry Publisher Tool..."
# Build for current platform
echo "Building for $(go env GOOS)/$(go env GOARCH)..."
go build -o "$OUTPUT_DIR/$BINARY_NAME" .
# Make the binary executable
chmod +x "$OUTPUT_DIR/$BINARY_NAME"
echo "Build complete: $OUTPUT_DIR/$BINARY_NAME"
# Optional: Build for multiple platforms
if [ "$1" == "--all" ]; then
echo "Building for all supported platforms..."
# Linux AMD64
GOOS=linux GOARCH=amd64 go build -o "$OUTPUT_DIR/${BINARY_NAME}-linux-amd64" .
# MacOS AMD64
GOOS=darwin GOARCH=amd64 go build -o "$OUTPUT_DIR/${BINARY_NAME}-darwin-amd64" .
# MacOS ARM64 (Apple Silicon)
GOOS=darwin GOARCH=arm64 go build -o "$OUTPUT_DIR/${BINARY_NAME}-darwin-arm64" .
# Windows AMD64
GOOS=windows GOARCH=amd64 go build -o "$OUTPUT_DIR/${BINARY_NAME}-windows-amd64.exe" .
echo "Multi-platform build complete in $OUTPUT_DIR/"
fi