Commit graph

66 commits

Author SHA1 Message Date
Avinash Sridhar
d266dd4eb0 feat(tests): add comprehensive tests for health and publish handlers 2025-05-27 19:13:51 -06:00
Tadas Antanavicius
4f89a896ec Add 2025-05-26 15:42:55 -07:00
Mr.Ge
bd9809fb6a
docs: update readme and mcp.json with repository url (#76)
- Give the correct URL address in the mcp.json and the main README

## Motivation and Context
Improve documentation

## How Has This Been Tested?
No Testing.

## Breaking Changes
N/A

## Types of changes
- [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to change)
- [x] Documentation update

## Checklist
- [ ] I have read the [MCP
Documentation](https://modelcontextprotocol.io)
- [ ] My code follows the repository's style guidelines
- [ ] New and existing tests pass locally
- [ ] I have added appropriate error handling
- [ ] I have added or updated documentation as needed
2025-05-26 08:35:21 -07:00
Avinash Sridhar
03bef72664 fix(docs): update README to reflect automatic retrieval of GitHub Client ID and update example mscp json file 2025-05-26 07:10:07 -07:00
Avinash Sridhar
b960840197 fix(publish): handle inline model corectly on publish 2025-05-26 07:10:07 -07:00
Avinash Sridhar
4dbf80562b feat(publisher): integrate GitHub Client ID into device flow authentication 2025-05-26 07:10:07 -07:00
Yusheng Guo
5d9171bdcc
fix(model): inline ServerDetail fields in PublishRequest (#62)
<!-- Provide a brief summary of your changes -->
Inline ServerDetail fields in PublishRequest

## Motivation and Context
<!-- Why is this change needed? What problem does it solve? -->
Fix #55 

## How Has This Been Tested?
<!-- Have you tested this in a real application? Which scenarios were
tested? -->

## Breaking Changes
<!-- Will users need to update their code or configurations? -->

## Types of changes
<!-- What types of changes does your code introduce? Put an `x` in all
the boxes that apply: -->
- [x] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to change)
- [ ] Documentation update

## Checklist
<!-- Go over all the following points, and put an `x` in all the boxes
that apply. -->
- [x] I have read the [MCP
Documentation](https://modelcontextprotocol.io)
- [x] My code follows the repository's style guidelines
- [x] New and existing tests pass locally
- [x] I have added appropriate error handling
- [x] I have added or updated documentation as needed

## Additional context
<!-- Add any other context, implementation notes, or design decisions
-->

94c19fafa4/scripts/test_publish.sh (L61-L102)

---------

Co-authored-by: Avinash Sridhar <sridharavinash@users.noreply.github.com>
2025-05-25 16:24:40 -04:00
ayoyu
bbcee90a6b refactor(docker): replace CMD with ENTRYPOINT 2025-05-25 12:41:19 -07:00
ayoyu
bead94ba1d fix(docker): ignore local mongo .db during rebuild 2025-05-25 12:41:19 -07:00
Avinash Sridhar
0d5740ea0d feat: add github_client_id to health check response schema 2025-05-24 09:45:27 -07:00
Avinash Sridhar
701988fca8 feat: enhance health check endpoint to include GitHub client ID 2025-05-24 09:45:27 -07:00
Tadas Antanavicius
a8cfd74d4c
Remove package_canonical (#59)
I originally introduced `package_canonical` into the API schema because,
at the time, we were thinking to "pin" the version of the MCP server to
_one_ of the referenced source code packages.

We are no longer doing this (we are maintaining a separate notion of
`version` unique to the MCP server), so I don't believe
`package_canonical` is needed anymore. Does anyone see otherwise?

This change removes all mentions in READMEs and usages in code.
2025-05-24 06:07:08 -07:00
Tadas Antanavicius
424257c6ca
Fix naming to use reverse DNS instead of deprecated @ syntax (#58) 2025-05-24 06:06:18 -07:00
Toby Padilla
defe27390d fix: add needed env vars to docker-compose.yml 2025-05-22 20:15:09 -07:00
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