Commit graph

75 commits

Author SHA1 Message Date
Avinash Sridhar
7edc35812f feat(script): add usage instructions and server startup methods to test script 2025-05-27 19:13:51 -06:00
Avinash Sridhar
b6c141a721 Fixed linter errors and fixed tests
- Added error handling for JSON encoding in ServersHandler and ServersDetailHandler.
- Updated test cases to reflect changes in handler functions and improved mock expectations.
- Refactored server initialization to include ReadHeaderTimeout for better request handling.
- Modified GitHubDeviceAuth to accept context in ValidateToken and checkOrgMembership methods.
- Improved error messages in database import functions for better debugging.
- Updated memory and mongo database list functions to accept context and improved filtering logic.
- Enhanced logging in publisher tool for better visibility during execution.
- Cleaned up code formatting and comments for better readability and maintainability.
2025-05-27 19:13:51 -06:00
Avinash Sridhar
c74a7af000 fix(tests): update server IDs to use real-ish uuids 2025-05-27 19:13:51 -06:00
Avinash Sridhar
9d0565de62 feat(ci): add CI pipeline with linting, building, and testing jobs 2025-05-27 19:13:51 -06:00
Avinash Sridhar
5736edd07a refactor(tests): remove redundant TestServersDetailHandler integration tests 2025-05-27 19:13:51 -06:00
Avinash Sridhar
a5abab50c4 feat(tests): add unit tests for servers and servers detail handlers 2025-05-27 19:13:51 -06:00
Avinash Sridhar
dd57b82859 feat(publish): set version as latest and add release date on publish 2025-05-27 19:13:51 -06:00
Avinash Sridhar
f9ab0bc49b update tests and memory implementation to follow real DB implementations as much as possible. Fix the tests to let the DB generate the server uuids rather than setting them up in the test. 2025-05-27 19:13:51 -06:00
Avinash Sridhar
d0a0adf620 feat(tests): add integration tests for publish functionality and enhance error handling 2025-05-27 19:13:51 -06:00
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