Commit graph

52 commits

Author SHA1 Message Date
Toby Padilla
94c19fafa4 docs: update readme with new schema, some cleanup 2025-05-17 11:56:22 -06:00
Toby Padilla
fa159e360f feat: use new seed file in docker build 2025-05-17 11:02:37 -06:00
Avinash Sridhar
5c238eceef feat: refactor to account for updated openAPI schema
* Update the model to handle new changes to schema based on https://github.com/modelcontextprotocol/registry/pull/33

* Made the import script a little simpler.
* Add a new updated seed file
* update template mcp.json file for publisher
2025-05-17 09:38:19 -06:00
Avinash Sridhar
5ef4d769ed feat: update model and script to use package_canonical instead of registry_canonical 2025-05-17 09:38:19 -06:00
luoxin.luo
81ac59bf8b Add a description of the API directory in the project structure. 2025-05-13 15:05:16 -04:00
Connor Peet
314f5f4bde refine descriptions, add runtime_hint, name_hint->value_hint 2025-05-13 14:55:30 -04:00
Connor Peet
3d695c391e make positional name->name_hint, keep name for kv and flags 2025-05-13 14:55:30 -04:00
Connor Peet
da32d8b472 embed template in basic arg type, simpler k/v input for headers and env vars 2025-05-13 14:55:30 -04:00
Connor Peet
41fd5ab4d5 is_repeated tweaks, name positional args, template properties->variables 2025-05-13 14:55:30 -04:00
Connor Peet
11d34ed1e8 rm UserInput array format 2025-05-13 14:55:30 -04:00
Connor Peet
62cbc7d267 arguments -> package_arguments 2025-05-13 14:55:30 -04:00
Connor Peet
0d1560729f allow template inputs for headers and environment variables 2025-05-13 14:55:30 -04:00
Connor Peet
46efa296af bring back choices 2025-05-13 14:55:30 -04:00
Connor Peet
8e5cf14a42 feat: refine representation of commands in the API
Refs #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/filesystem@1.0.2",
    "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.
2025-05-13 14:55:30 -04:00
Tadas Antanavicius
b005e9c09a
OpenAPI spec for official registry API (#3)
First (incomplete) cut of OpenAPI spec for registry API. To be continued in separate issues.
2025-05-09 12:22:51 -07:00
Toby Padilla
d3b607b18b docs: update env var docs in readme 2025-05-07 22:27:26 -06:00
Avinash Sridhar
d32b528104 feat: require GitHub Client ID environment variable for publshing 2025-05-06 09:47:26 -06:00
Toby Padilla
6b72032222 docs: add publisher to README 2025-05-05 15:25:57 -06:00
Toby Padilla
bc137e9317 fix: ignore error on indexes already exist 2025-05-05 15:25:57 -06:00
Toby Padilla
073555ba04 docs: update README with new import and discussion 2025-05-05 15:25:57 -06:00
Toby Padilla
a81d5a5bb0 chore: remove Makefile 2025-05-05 15:25:57 -06:00
Toby Padilla
acdf3efeaf feat: load seed.json servers by default 2025-05-05 15:25:57 -06:00
Avinash Sridhar
f843bd4243 feat(auth): refactor authentication handling by removing redundant checks and introducing dynamic auth method determination 2025-05-05 14:38:45 -06:00
Avinash Sridhar
6191066b2e feat(auth): enhance token validation to ensure association with GitHub application and improve error handling 2025-05-05 14:38:45 -06:00
Avinash Sridhar
9c6eebbed0 feat: implement server publishing endpoint with Bearer token authentication and update documentation 2025-05-05 14:38:45 -06:00
Avinash Sridhar
e0a4883465 docs: update README to clarify build script execution and command-line argument descriptions 2025-05-05 14:38:45 -06:00
Avinash Sridhar
089fd3994a feat(auth): streamline GitHub token validation and add organization membership check 2025-05-05 14:38:45 -06:00
Avinash Sridhar
59adaa9aa5 feat: add build script and update README for MCP Registry Publisher Tool 2025-05-05 14:38:45 -06:00
Avinash Sridhar
297d279239 fix: add .mcpregistry* to .gitignore 2025-05-05 14:38:45 -06:00
Avinash Sridhar
2089c5aaa1 feat(auth): Implement GitHub OAuth authentication flow for package publishing
- Added authentication service and GitHub OAuth integration.
- Introduced new authentication methods and structures in the model.
- Updated the API to handle authentication during the publishing process.
- Created handlers for starting and checking the status of the OAuth flow.
- Enhanced the publish handler to validate authentication credentials.
- Updated configuration to include GitHub OAuth settings.
- Added tests for the OAuth flow and publishing with authentication.
- Updated documentation to reflect changes in the API and authentication process.
2025-05-05 14:38:45 -06:00
Avinash Sridhar
582d93a103 feat: implement publish endpoint and related database functionality 2025-05-05 14:38:45 -06:00
Tadas Antanavicius
b09275fa67
Contributing.md (#16) 2025-05-05 09:34:34 -07:00
Avinash Sridhar
8832b9a21a feat: add MongoDB data importer tool and update README 2025-04-25 16:38:19 -06:00
Toby Padilla
d25404bfd6 fix: go.mod replace to reference local module
We need to work in multiple orgs with different private repos, this is a
temporary solution until we make the main repo public.
2025-04-24 18:31:11 -06:00
Toby Padilla
c9cb6b9e2e fix: copy swagger.yaml into docker image 2025-04-24 18:17:36 -06:00
Toby Padilla
809c99e398 feat: use env prefix 2025-04-24 18:17:36 -06:00
Toby Padilla
b5f8488af3 feat: docker-compose.yml with registry and mongo 2025-04-24 18:17:36 -06:00
Toby Padilla
b2a4b33e7d feat: use caarlos0/env for config 2025-04-24 18:17:36 -06:00
Avinash Sridhar
ae24924f39
Update README with database configuration details and run instructions 2025-04-24 15:17:25 -04:00
Avinash Sridhar
c0b5d20d14
Add seed data json
Contains about 300+ initial servers that can be used to seed a mongoDB
2025-04-24 15:12:53 -04:00
Avinash Sridhar
1508b8d66a
Merge pull request #7 from modelcontextprotocol:api-docs
Add Swagger API documentation and handlers for v0
2025-04-23 23:42:30 -04:00
Avinash Sridhar
e63cd50954
Fix error handling in SwaggerJSONHandler to ensure working directory retrieval is validated 2025-04-23 23:42:09 -04:00
Avinash Sridhar
78445eaca6
Add API documentation section with Swagger UI access details 2025-04-23 23:38:31 -04:00
Avinash Sridhar
39bcae1c81
Add Swagger API documentation and handlers for v0 2025-04-23 23:36:23 -04:00
Avinash Sridhar
4c401c0b25
Merge pull request #6 from modelcontextprotocol/sridharavinash/seed
Add count to server response and fix Makefile paths
2025-04-23 22:32:44 -04:00
Avinash Sridhar
ea2af952a8
Fix run commands in Makefile to use correct main package paths 2025-04-23 22:27:14 -04:00
Avinash Sridhar
0d9ff1fcb1
Add a count to the servers response 2025-04-23 22:21:40 -04:00
Avinash Sridhar
a1c8e6a412
Merge pull request #5 from modelcontextprotocol/readme-cleanup
Update README to reflect binary name change
2025-04-22 21:55:47 -04:00
Avinash Sridhar
f72d5ce9f4
Update README to reflect binary name change from 'mcp-registry' to 'registry' 2025-04-22 20:51:48 -04:00
Toby Padilla
15985c10b2
Merge pull request #4 from modelcontextprotocol/api_v0
Init world. Basic registry API server <WIP>
2025-04-22 16:16:45 -06:00