-
Notifications
You must be signed in to change notification settings - Fork 4
feat: implement MVP for MCP Resources and Prompts #43
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
3 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,41 @@ | ||
| package prompts | ||
|
|
||
| import ( | ||
| "context" | ||
| "fmt" | ||
|
|
||
| "github.com/doITmagic/rag-code-mcp/internal/service/engine" | ||
| "github.com/modelcontextprotocol/go-sdk/mcp" | ||
| ) | ||
|
|
||
| // Register registers all MCP prompts provided by this package on the given mcp.Server. | ||
| func Register(mcpServer *mcp.Server, eng *engine.Engine) { | ||
| mcpServer.AddPrompt(&mcp.Prompt{ | ||
| Name: "System Diagnostics", | ||
| Description: "Analyze the current indexing status and troubleshoot common issues based on the workspace resources.", | ||
| Title: "Analyze RagCode Indexing System", | ||
| }, func(ctx context.Context, _ *mcp.GetPromptRequest) (*mcp.GetPromptResult, error) { | ||
| // Same detection as Resources: auto-detect workspace via ctx, no custom logic. | ||
| wctx, err := eng.DetectContext(ctx, "") | ||
| if err != nil { | ||
| return nil, fmt.Errorf("failed to detect workspace: %w", err) | ||
| } | ||
|
|
||
| promptText := fmt.Sprintf(`Please analyze the current indexing status of the RagCode MCP server for the workspace located at: %s | ||
|
|
||
| You can inspect the indexing status by reading the resource directly via URI: "ragcode://status/indexing" or using your available tools. | ||
| Then, inform me if there are any issues such as stuck processes or parsing errors.`, wctx.Root) | ||
|
|
||
| return &mcp.GetPromptResult{ | ||
| Description: "Prompt to diagnose indexing and execution issues automatically.", | ||
| Messages: []*mcp.PromptMessage{ | ||
| { | ||
| Role: mcp.Role("user"), | ||
| Content: &mcp.TextContent{ | ||
| Text: promptText, | ||
| }, | ||
| }, | ||
| }, | ||
| }, nil | ||
| }) | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,50 @@ | ||
| package resources | ||
|
|
||
| import ( | ||
| "context" | ||
| "encoding/json" | ||
| "fmt" | ||
|
|
||
| "github.com/doITmagic/rag-code-mcp/internal/service/engine" | ||
| "github.com/modelcontextprotocol/go-sdk/mcp" | ||
| ) | ||
|
|
||
| // Register registers all MCP resources provided by this package on the given mcp.Server. | ||
| func Register(mcpServer *mcp.Server, eng *engine.Engine) { | ||
| mcpServer.AddResource(&mcp.Resource{ | ||
| URI: "ragcode://status/indexing", | ||
| Name: "Indexing Status", | ||
| Description: "Returns the current indexing status and progress for the workspace.", | ||
| MIMEType: "application/json", | ||
| }, func(ctx context.Context, request *mcp.ReadResourceRequest) (*mcp.ReadResourceResult, error) { | ||
| // Same detection mechanism used by all existing tools. | ||
| // Middleware in run.go reads X-Workspace-Root from the HTTP header into ctx, | ||
| // and DetectContext picks it up automatically via Tier 2 (transport.GetWorkspaceHint). | ||
| wctx, err := eng.DetectContext(ctx, "") | ||
| if err != nil { | ||
| return nil, fmt.Errorf("failed to detect workspace: %w", err) | ||
| } | ||
|
|
||
| // GetIndexStatus reads from the on-disk index_status.json, | ||
| // thread-safe against the indexer writing concurrently. | ||
| status := eng.GetIndexStatus(wctx.Root) | ||
| if status == nil { | ||
| return nil, fmt.Errorf("index status not found for workspace %s", wctx.Root) | ||
| } | ||
|
|
||
| blob, err := json.MarshalIndent(status, "", " ") | ||
| if err != nil { | ||
| return nil, fmt.Errorf("failed to marshal index status: %w", err) | ||
| } | ||
|
|
||
| return &mcp.ReadResourceResult{ | ||
| Contents: []*mcp.ResourceContents{ | ||
| { | ||
| URI: request.Params.URI, | ||
| MIMEType: "application/json", | ||
| Text: string(blob), | ||
| }, | ||
| }, | ||
| }, nil | ||
| }) | ||
| } |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.