Skip to content

Fix issue #27: Update README API documentation#28

Merged
aarora79 merged 1 commit intomainfrom
fix-issue-27-update-readme-api-documentation
Jun 14, 2025
Merged

Fix issue #27: Update README API documentation#28
aarora79 merged 1 commit intomainfrom
fix-issue-27-update-readme-api-documentation

Conversation

@aarora79
Copy link
Contributor

This PR addresses issue #27 by updating the README to reflect the current architecture where all interactions with the registry are through the mcpgw MCP server.

Changes Made

Removed Outdated Content

  • Removed 'API Endpoints (Brief Overview)' section: This section contained direct API endpoints that are no longer the recommended way to interact with the registry
  • Removed curl examples: Eliminated outdated direct API access examples that used curl commands

Updated Registration Documentation

  • Renamed section: Changed 'API Usage' to 'Adding New MCP Servers to the Registry' for clarity
  • Updated Option 1: Now focuses on the Registry UI with clear instructions to click the 'Register Server' button
  • Added comprehensive parameter documentation: Based on the register_service tool in servers/mcpgw/server.py:
    • Server Name (required)
    • Path (required) - unique URL path prefix
    • Proxy Pass URL (required) - internal or external URL where MCP server runs
    • Description (optional)
    • Tags (optional)
    • Number of Tools (optional)
    • Number of Stars (optional)
    • Is Python (optional)
    • License (optional)

Future Integration

  • Added Option 2: Marked as 'coming soon' for MCP Host integration with VSCode-insiders and Cursor

Preserved Useful Content

  • Kept Python MCP client example: Maintained the integration example as it's still relevant for programmatic access

Technical Details

  • Parameters documented based on the actual register_service tool implementation
  • Focused on user-friendly registration methods rather than low-level API calls
  • Aligned documentation with current mcpgw MCP server architecture

Fixes #27

- Remove 'API Endpoints (Brief Overview)' section as all interactions are now through mcpgw MCP server
- Rename 'API Usage' section to 'Adding New MCP Servers to the Registry'
- Update Option 1 to focus on Registry UI with 'Register Server' button
- Document all register_service tool parameters based on servers/mcpgw/server.py
- Add Option 2 as 'coming soon' for MCP Host integration (VSCode-insiders, Cursor)
- Remove outdated curl examples and direct API access documentation
- Keep Python MCP client integration example for reference
@aarora79
Copy link
Contributor Author

This PR was created in collaboration with Claude 3.5 Sonnet (4).

Development Metrics:

  • Token usage for this task: ~16,800 tokens (51,800 - 35,000)
  • Cost for this task: /bin/sh.55 (/bin/sh.92 - /bin/sh.37)
  • Model: claude-sonnet-4-20250514

The AI assistant helped with:

  • Analysis of the register_service tool parameters from servers/mcpgw/server.py
  • README restructuring and content updates
  • Removal of outdated API documentation
  • Creation of user-friendly registration documentation
  • Git branch management and PR creation

@aarora79 aarora79 merged commit 49d6589 into main Jun 14, 2025
1 of 9 checks passed
viviluccioli pushed a commit to viviluccioli/mcp-gateway-registry that referenced this pull request Jan 16, 2026
Refs agentic-community#28. After some thinking, this tries for a 'best of both worlds'
approach. Simple arguments can be present essentially as the original
spec recommended. As discussed, we don't specify the args for `npx` and
friends directly, so a simple package is merely...

```yaml
- name: my-api-mcp
  # ...
  packages:
    - type: npm
      name: "@c4312/my-api-mcp"
      version: "0.0.1"
      arguments:
        # Named inputs in 'arguments' generate a `--name=<value>`
        - type: named
          name: "api-key"
          is_required: true
          is_secret: true
```

However, I think we need to be able to specify runtime args in some
cases, otherwise the registry eventually mirrors all docker configs and
options which is not a great situation to be in. So, I suggest a
`runtime_args` in the same format. Say I wanted that for npm, I could:

```yaml
- name: my-api-mcp
  # ...
  packages:
    - type: npm
      name: "@c4312/my-api-mcp"
      version: "0.0.1"
      runtime_arguments:
        # Arguments with a pre-specified `value` don't get prompted for input
        - type: positional
          value: "--experimental-eventsource"
```

But Docker mounts are... complex, and ultimately we may deal with cases
that need multiple inputs in an argument like that. So for that I suggest
the third kind of "templated" input that does basic replacements and has
`properties` that follow the same general input schema:

```yaml
- name: server-filesystem
  # ...
  packages:
    - type: docker
      name: "mcp/filesystem"
      version: "0.0.1"
      runtime_arguments:
        - type: template
          description: Mount paths to access.
          required: true
          repated: true
          template: "--mount=type=bind,src={host_path},dst={container_path}"
          values:
            host_path:
              description: Path to access on the local machine
              required: true
              format: filepath
            container_path:
              description: Path to mount in the container. It should be rooted in `/project` directory.
              required: true
              format: string
              default: "/project"

      arguments:
        - type: positional
          value: "/project"
```

And then client config ends up being pretty simple, for the above case
for example a client could have this config:

```
{
  "filesystem": {
    "server": "@modelcontextprotocol/servers/src/[email protected]",
    "package": "docker",
    "settings": {
      "mount_config": [
        { "source_path": "/Users/username/Desktop", "target_path": "/project/desktop" },
        { "source_path": "/path/to/other/allowed/dir", "target_path": "//projects/other/allowed/dir,ro" },
      ]
    }
  }
}
```

Which might generate a CLI:

```
docker run \
  --mount=type=bind,src=/Users/username/Desktop,dst=/project/desktop \
  --mount=type=bind,src=/path/to/other/allowed/dir,dst=/project/other/allowed/dir,ro \
  mcp/filesystem:1.0.2 \
  /project
```

I think this does a good job of accomplishing the goals we care about:

- We get nicely defined inputs that are easy to extend, easy to process,
  and easy for clients to configure.
- Versioning is enforced as we don't require the package to specify the
  identifier to npx/uvx/etc.
- We _usually_ can break away from a dependency on a specific runtime.
  This promise is broken a bit with `runtime_arguments`, most packages
  should not need this and those that do are those inherently more
  tightly coupled to a specific runtime like Docker (e.g. they would be
  pretty uncommon for Node or Python.)
- We don't have a suple complex template system with loops and fallbacks
  and conditionals, like we would if we tried to have a single template
  string for a command.
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.

Update README: Remove API endpoints section and improve MCP server registration documentation

1 participant