Latest changes all archived
This commit is contained in:
+61
@@ -0,0 +1,61 @@
|
||||
## ADDED Requirements
|
||||
|
||||
### Requirement: Set collection on existing document via MCP
|
||||
|
||||
The MCP server SHALL expose a `kb_set_collection` tool that assigns or changes the collection of an existing document. The tool SHALL accept a `document_id` (required) and `collection` (optional string). When `collection` is provided, the tool SHALL ensure the document belongs to exactly that collection by removing any existing `collection:*` tags and adding the new one. When `collection` is omitted or null, the tool SHALL remove all `collection:*` tags from the document, leaving it unassigned.
|
||||
|
||||
The tool SHALL return the updated document with the `collection` field and cleaned tags (collection tags stripped), consistent with other MCP tool responses.
|
||||
|
||||
#### Scenario: Assign untagged document to a collection
|
||||
|
||||
- **WHEN** `kb_set_collection` is called with `document_id=42` and `collection="workspace"`
|
||||
- **THEN** the document SHALL have the tag `collection:workspace` added
|
||||
- **AND** the response SHALL include `"collection": "workspace"`
|
||||
|
||||
#### Scenario: Change document from one collection to another
|
||||
|
||||
- **WHEN** `kb_set_collection` is called with `document_id=42` and `collection="memory"` on a document currently in collection "documents"
|
||||
- **THEN** the tag `collection:documents` SHALL be removed and `collection:memory` SHALL be added
|
||||
- **AND** the response SHALL include `"collection": "memory"`
|
||||
|
||||
#### Scenario: Remove document from all collections
|
||||
|
||||
- **WHEN** `kb_set_collection` is called with `document_id=42` and no `collection` parameter
|
||||
- **THEN** all `collection:*` tags SHALL be removed from the document
|
||||
- **AND** the response SHALL include `"collection": null`
|
||||
|
||||
#### Scenario: Document not found
|
||||
|
||||
- **WHEN** `kb_set_collection` is called with a `document_id` that does not exist
|
||||
- **THEN** the tool SHALL return an error response indicating the document was not found
|
||||
|
||||
### Requirement: Delete document via MCP
|
||||
|
||||
The MCP server SHALL expose a `kb_delete` tool that permanently deletes a document from the knowledge base. The tool SHALL accept a `document_id` (required integer). Deletion SHALL remove the document, its chunks, embeddings, tags, and any stored file on disk.
|
||||
|
||||
The tool SHALL return a confirmation response including the deleted document's ID and title.
|
||||
|
||||
#### Scenario: Successful deletion
|
||||
|
||||
- **WHEN** `kb_delete` is called with `document_id=42`
|
||||
- **THEN** the document, its chunks, embeddings, tag associations, and stored file SHALL be deleted
|
||||
- **AND** the response SHALL include `"status": "deleted"`, the `document_id`, and the document `title`
|
||||
|
||||
#### Scenario: Document not found
|
||||
|
||||
- **WHEN** `kb_delete` is called with a `document_id` that does not exist
|
||||
- **THEN** the tool SHALL return an error response indicating the document was not found
|
||||
|
||||
### Requirement: Engine client delete method
|
||||
|
||||
The MCP engine client (`mcp/engine.py`) SHALL provide a `delete_document(doc_id)` method that sends a `DELETE` request to `/api/v1/documents/{doc_id}` and returns the JSON response. The method SHALL raise on non-2xx status codes, consistent with other engine client methods.
|
||||
|
||||
#### Scenario: Successful engine client delete call
|
||||
|
||||
- **WHEN** `delete_document(42)` is called and the engine API returns 200
|
||||
- **THEN** the method SHALL return the parsed JSON response
|
||||
|
||||
#### Scenario: Engine client delete for missing document
|
||||
|
||||
- **WHEN** `delete_document(999)` is called and the engine API returns 404
|
||||
- **THEN** the method SHALL raise an `httpx.HTTPStatusError`
|
||||
Reference in New Issue
Block a user