Refactor DefaultToolsetGroup to use the new ToolsetRegistry pattern:
- Add NewDefaultToolsetRegistry() that creates a registry with all tools
- Tools are now self-describing (toolset + read/write from metadata)
- No more manual AddReadTools/AddWriteTools categorization
- DefaultToolsetGroup uses the registry with ToolsetGroupConfig
- Resource templates and prompts handled separately (not tools)
This enables scope-aware tool filtering when creating ToolsetGroups.
Add ToolsetRegistry struct that holds toolset definitions and tools,
with a NewToolsetGroup method that accepts ToolsetGroupConfig:
- ReadOnly: restricts to read-only tools
- ActiveToolsets: which toolsets to enable
- AvailableScopes: filter tools by OAuth scope requirements
- nil: no scope checking (all tools available)
- []: empty means no scopes (only tools with no requirements)
- [...]: tools must have required scopes in the list
This enables dynamic tool filtering based on the user's actual
OAuth token scopes, ensuring only authorized tools are exposed.
- Move ToolsetMetadata type to toolsets package with alias in github package
- Update NewToolMeta to accept ToolsetMetadata instead of string
- Update NewToolsetGroupFromTools to accept []ToolsetMetadata slice
- Remove need for .ID when calling NewToolMeta (e.g., NewToolMeta(ToolsetMetadataRepos) instead of NewToolMeta(ToolsetMetadataRepos.ID))
Add a new constructor that creates a ToolsetGroup from a list of ServerTools.
Tools are automatically categorized as read or write based on their
ReadOnlyHint annotation, and grouped into toolsets based on the 'toolset'
field in their Meta.
This enables tools to be fully self-describing - registration can now
derive toolset membership and read/write classification directly from
the tool definition.
Build and Test Go Project / build (ubuntu-latest) (push) Has been cancelled
Build and Test Go Project / build (windows-latest) (push) Has been cancelled
CodeQL / Analyze (go) (push) Has been cancelled
CodeQL / Analyze (actions) (push) Has been cancelled
Docker / build (push) Has been cancelled
Build and Test Go Project / build (macos-latest) (push) Has been cancelled
GoReleaser Release / release (push) Has been cancelled
License Check / license-check (push) Has been cancelled
Publish to MCP Registry / publish (push) Has been cancelled
OpenAI strict mode requires the `properties` field to be present in
object schemas, even when empty. The jsonschema library uses omitempty
which causes empty maps to be omitted during JSON serialization.
This change uses json.RawMessage to bypass the library's serialization
and explicitly include `"properties": {}` in the output.
Fixes#1548
GoReleaser Release / release (push) Has been cancelled
License Check / license-check (push) Has been cancelled
Publish to MCP Registry / publish (push) Has been cancelled
CodeQL / Analyze (go) (push) Has been cancelled
CodeQL / Analyze (actions) (push) Has been cancelled
Docker / build (push) Has been cancelled
Build and Test Go Project / build (macos-latest) (push) Has been cancelled
Build and Test Go Project / build (ubuntu-latest) (push) Has been cancelled
Build and Test Go Project / build (windows-latest) (push) Has been cancelled
* add enabledTools to StdioServerConfig
* add EnabledTools to MCPServerConfig, and logic to bypass toolset config if present
* add logic to register specific tools
* update readme
* Update to be consistent with: https://docs.google.com/document/d/1tOOBJ4y9xY61QVrO18ymuVt4SO9nV-z2B4ckaL2f9IU/edit?tab=t.0#heading=h.ffto4e5dwzlf
specifically
- allow for --tools and dynamic toolset mode together
- allow for --tools and --toolsets together
* go mod tidy
* update
* clean up comment
* fix
* fix
* updte
* update
* clean up
Build and Test Go Project / build (macos-latest) (push) Has been cancelled
Build and Test Go Project / build (ubuntu-latest) (push) Has been cancelled
Build and Test Go Project / build (windows-latest) (push) Has been cancelled
CodeQL / Analyze (go) (push) Has been cancelled
CodeQL / Analyze (actions) (push) Has been cancelled
Docker / build (push) Has been cancelled
GoReleaser Release / release (push) Has been cancelled
License Check / license-check (push) Has been cancelled
Publish to MCP Registry / publish (push) Has been cancelled
* Add state metadata fields to get_discussion tool
Fixes#1303
The get_discussion tool was missing important state metadata that's
already available in get_issue. Added four fields to provide complete
discussion status information:
- state: Current discussion state (OPEN/CLOSED)
- isAnswered: Whether the discussion has an accepted answer
- answeredAt: Timestamp when answer was provided
- answerChosenAt: Timestamp when answer was selected
Changed GetDiscussion to return a map instead of github.Discussion
struct since the go-github library doesn't include all these fields
in its type definition. This approach is consistent with other
functions in this codebase (ListDiscussions, GetDiscussionComments).
All tests pass and linter checks pass.
* Fix Discussion field mappings based on GitHub GraphQL API
Changes:
- Replace 'State' (doesn't exist) with 'Closed' (Boolean)
- Remove 'AnsweredAt' (doesn't exist)
- Keep 'IsAnswered' (verified to exist in GitHub GraphQL API)
- Use 'AnswerChosenAt' for answer timestamp
Updated both implementation and tests to match actual GitHub GraphQL schema.
All tests passing.
---------
Co-authored-by: tommaso-moro <tommaso-moro@github.com>
* add repo nav tool
* comment responses
* move into git.go
* fix documentation
* Update pkg/github/git.go
Co-authored-by: Adam Holt <omgitsads@github.com>
* Fix undefined variable error in GetRepositoryTree
* Update git.go to use github.com/google/go-github/v77 for consistency with main branch
---------
Co-authored-by: Adam Holt <omgitsads@github.com>
Build and Test Go Project / build (ubuntu-latest) (push) Has been cancelled
Build and Test Go Project / build (windows-latest) (push) Has been cancelled
CodeQL / Analyze (go) (push) Has been cancelled
CodeQL / Analyze (actions) (push) Has been cancelled
Docker / build (push) Has been cancelled
Build and Test Go Project / build (macos-latest) (push) Has been cancelled
GoReleaser Release / release (push) Has been cancelled
License Check / license-check (push) Has been cancelled
Publish to MCP Registry / publish (push) Has been cancelled
* licences update from required CI build
* fixes licences
* implements new helpers to support google/go-github v77 API
* upgrades toolset to leverage google/go-github v77 with the exception of Update and Delete items
* refactor string conversion helpers
* reverts migration google/go-github GetProjectItem due to bug with the underlying library implementation
* additional refactoring for server helpers based on recent updates to google/go-github
* test updates based on underlying lib requirements
* resolves licences conflicts with script/licenses
* cleanup
* reduce change diff
* updates helper docs to reflect to methods
* upgrades delete projects item to google/go-github
* returns error from parsing string to int64
* improved OptionalBigIntArrayParam doc
* improves implementation for RequiredBigInt
* improves documentation for temporary fieldSelectionOptions struct
* updates github-mcp-server to go-github/v76
* updates license files
* refactors ListProjects to make use of
google/go-github ProjectsService
* refactors GetProject to make use of google/go-github ProjectsService
* declaring commit without a pointer
* cleanup additional commit pointer
---------
Co-authored-by: Tommaso Moro <37270480+tommaso-moro@users.noreply.github.com>