Documentation
¶
Overview ¶
Package mcpserver exposes MindCLI's read-only knowledge operations through bounded, redacted transport-neutral methods and an MCP adapter.
Index ¶
- Constants
- func New(service *Service, version string, logger *slog.Logger) *mcp.Server
- type AnswerGenerator
- type AskInput
- type AskOutput
- type CollectionOutput
- type ConfidenceOutput
- type DocumentOutput
- type FilterInput
- type GetDocumentInput
- type ListCollectionsOutput
- type RecentDocumentsInput
- type RecentDocumentsOutput
- type RelatedDocumentsInput
- type RelatedDocumentsOutput
- type RelatedResultOutput
- type SearchInput
- type SearchOutput
- type SearchResultOutput
- type Searcher
- type Service
- func (s *Service) Ask(ctx context.Context, input AskInput) (AskOutput, error)
- func (s *Service) GetDocument(ctx context.Context, input GetDocumentInput) (DocumentOutput, error)
- func (s *Service) ListCollections(ctx context.Context) (ListCollectionsOutput, error)
- func (s *Service) RecentDocuments(ctx context.Context, input RecentDocumentsInput) (RecentDocumentsOutput, error)
- func (s *Service) RelatedDocuments(ctx context.Context, input RelatedDocumentsInput) (RelatedDocumentsOutput, error)
- func (s *Service) Search(ctx context.Context, input SearchInput) (SearchOutput, error)
- func (s *Service) ShowCollection(ctx context.Context, input ShowCollectionInput) (ShowCollectionOutput, error)
- type ShowCollectionInput
- type ShowCollectionOutput
Constants ¶
View Source
const ( DefaultResultLimit = 10 MaxResultLimit = 50 MaxQueryBytes = 4096 MaxFilterValues = 50 MaxFilterValueBytes = 512 MaxDocumentContentBytes = 20 * 1024 MaxTitleBytes = 4096 MaxPathBytes = 8192 MaxPreviewBytes = 1024 MaxMetadataFields = 50 MaxMetadataValueBytes = 1024 MaxAnswerBytes = 32 * 1024 MaxAskSources = 5 MaxAskContextBytesPerDoc = 4096 )
Variables ¶
This section is empty.
Functions ¶
Types ¶
type AnswerGenerator ¶
type AnswerGenerator interface {
GenerateAnswer(context.Context, string, []string) (string, error)
}
AnswerGenerator is the non-streaming LLM behavior used by the ask tool.
type AskInput ¶
type AskInput struct {
Question string `json:"question" jsonschema:"question to answer from the local knowledge index"`
Limit int `json:"limit,omitempty" jsonschema:"maximum retrieved documents from 1 to 50"`
Filters FilterInput `json:"filters,omitempty" jsonschema:"typed filters applied before answer generation"`
}
type AskOutput ¶
type AskOutput struct {
Answer string `json:"answer"`
Confidence ConfidenceOutput `json:"confidence"`
Citations []DocumentOutput `json:"citations"`
}
type CollectionOutput ¶
type ConfidenceOutput ¶
type DocumentOutput ¶
type DocumentOutput struct {
ID string `json:"id"`
Source string `json:"source"`
Path string `json:"path"`
Title string `json:"title"`
Content string `json:"content,omitempty"`
Preview string `json:"preview,omitempty"`
Metadata map[string]string `json:"metadata,omitempty"`
IndexedAt time.Time `json:"indexed_at"`
ModifiedAt time.Time `json:"modified_at"`
Truncated bool `json:"truncated,omitempty"`
}
type FilterInput ¶
type FilterInput struct {
Sources []string `` /* 128-byte string literal not displayed */
Tags []string `json:"tags,omitempty" jsonschema:"tags every result must contain"`
ExcludedTags []string `json:"excluded_tags,omitempty" jsonschema:"tags results must not contain"`
Collections []string `json:"collections,omitempty" jsonschema:"collection names; multiple names form a union"`
After string `json:"after,omitempty" jsonschema:"inclusive YYYY-MM-DD or RFC3339 timestamp"`
Before string `json:"before,omitempty" jsonschema:"exclusive YYYY-MM-DD or RFC3339 timestamp"`
Paths []string `json:"paths,omitempty" jsonschema:"case-insensitive path fragments every result must contain"`
Domains []string `json:"domains,omitempty" jsonschema:"domains or parent domains to match"`
Kinds []string `json:"kinds,omitempty" jsonschema:"source-specific record kinds such as bookmark"`
ExactPhrases []string `json:"exact_phrases,omitempty" jsonschema:"exact phrases every result must contain"`
ExcludedTerms []string `json:"excluded_terms,omitempty" jsonschema:"words or phrases results must not contain"`
RelativeTime string `json:"relative_time,omitempty" jsonschema:"today, yesterday, this week, last week, this month, last month, or last year"`
}
FilterInput is the typed MCP representation of MindCLI's structured filters.
type GetDocumentInput ¶
type ListCollectionsOutput ¶
type ListCollectionsOutput struct {
Collections []CollectionOutput `json:"collections"`
}
type RecentDocumentsInput ¶
type RecentDocumentsInput struct {
Since string `json:"since,omitempty" jsonschema:"lookback such as 7d, 2w, or 24h, or an inclusive timestamp"`
Before string `json:"before,omitempty" jsonschema:"exclusive YYYY-MM-DD or RFC3339 timestamp; defaults to now"`
Limit int `json:"limit,omitempty" jsonschema:"maximum documents from 1 to 50"`
}
type RecentDocumentsOutput ¶
type RecentDocumentsOutput struct {
After time.Time `json:"after"`
Before time.Time `json:"before"`
Documents []DocumentOutput `json:"documents"`
}
type RelatedDocumentsInput ¶
type RelatedDocumentsOutput ¶
type RelatedDocumentsOutput struct {
Source DocumentOutput `json:"source"`
Results []RelatedResultOutput `json:"results"`
}
type RelatedResultOutput ¶
type RelatedResultOutput struct {
Document DocumentOutput `json:"document"`
Score float64 `json:"score"`
Reasons []query.RelationReason `json:"reasons"`
}
type SearchInput ¶
type SearchInput struct {
Query string `json:"query,omitempty" jsonschema:"search text, optionally including MindCLI structured query syntax"`
Limit int `json:"limit,omitempty" jsonschema:"maximum results from 1 to 50"`
Filters FilterInput `json:"filters,omitempty" jsonschema:"typed filters combined with filters in query"`
}
type SearchOutput ¶
type SearchOutput struct {
Results []SearchResultOutput `json:"results"`
ActiveFilters []string `json:"active_filters,omitempty"`
}
type SearchResultOutput ¶
type SearchResultOutput struct {
Document DocumentOutput `json:"document"`
Score float64 `json:"score"`
Highlights []string `json:"highlights,omitempty"`
}
type Searcher ¶
type Searcher interface {
SearchParsed(context.Context, query.ParsedQuery, int) (storage.SearchResults, error)
Related(context.Context, string, int) ([]query.RelatedResult, error)
}
Searcher is the read-only retrieval behavior required by the MCP service.
type Service ¶
type Service struct {
// contains filtered or unexported fields
}
Service implements the bounded read-only operations exposed as MCP tools.
func NewService ¶
func NewService(db *storage.DB, searcher Searcher, llm AnswerGenerator, redactor privacy.Redactor) *Service
NewService creates a read-only service over an existing MindCLI index.
func (*Service) GetDocument ¶
func (s *Service) GetDocument(ctx context.Context, input GetDocumentInput) (DocumentOutput, error)
func (*Service) ListCollections ¶
func (s *Service) ListCollections(ctx context.Context) (ListCollectionsOutput, error)
func (*Service) RecentDocuments ¶
func (s *Service) RecentDocuments(ctx context.Context, input RecentDocumentsInput) (RecentDocumentsOutput, error)
func (*Service) RelatedDocuments ¶
func (s *Service) RelatedDocuments(ctx context.Context, input RelatedDocumentsInput) (RelatedDocumentsOutput, error)
func (*Service) Search ¶
func (s *Service) Search(ctx context.Context, input SearchInput) (SearchOutput, error)
func (*Service) ShowCollection ¶
func (s *Service) ShowCollection(ctx context.Context, input ShowCollectionInput) (ShowCollectionOutput, error)
type ShowCollectionInput ¶
type ShowCollectionOutput ¶
type ShowCollectionOutput struct {
Collection CollectionOutput `json:"collection"`
Documents []DocumentOutput `json:"documents"`
}
Click to show internal directories.
Click to hide internal directories.