mirror of
https://github.com/basicmachines-co/basic-memory
synced 2026-06-21 13:47:35 +00:00
5b4f0eafcc
* configure logging * set mcp output logging also * fix type check errors * fix type check * rename Permalink schema type * fix type errors * add typechecks to ci workflow * pytest coverage setup * add tests for status cli * sync tests coverage * watch_service test coverage * tests for tool_utils.py * clean up imports * file_utils coverage * markdown plugins coverage * 99% test coverage * more test coverage, remove ObservationCategory * more tool coverage * fix type-check * format, upgrade deps --------- Co-authored-by: phernandez <phernandez@basicmachines.co>
57 lines
2.0 KiB
Python
57 lines
2.0 KiB
Python
"""Knowledge graph management tools for Basic Memory MCP server."""
|
|
|
|
from basic_memory.mcp.server import mcp
|
|
from basic_memory.mcp.tools.utils import call_get, call_post
|
|
from basic_memory.schemas.base import Permalink
|
|
from basic_memory.schemas.request import (
|
|
GetEntitiesRequest,
|
|
)
|
|
from basic_memory.schemas.delete import (
|
|
DeleteEntitiesRequest,
|
|
)
|
|
from basic_memory.schemas.response import EntityListResponse, EntityResponse, DeleteEntitiesResponse
|
|
from basic_memory.mcp.async_client import client
|
|
|
|
|
|
@mcp.tool(
|
|
description="Get complete information about a specific entity including observations and relations",
|
|
)
|
|
async def get_entity(permalink: Permalink) -> EntityResponse:
|
|
"""Get a specific entity info by its permalink.
|
|
|
|
Args:
|
|
permalink: Path identifier for the entity
|
|
"""
|
|
url = f"/knowledge/entities/{permalink}"
|
|
response = await call_get(client, url)
|
|
return EntityResponse.model_validate(response.json())
|
|
|
|
|
|
@mcp.tool(
|
|
description="Load multiple entities by their permalinks in a single request",
|
|
)
|
|
async def get_entities(request: GetEntitiesRequest) -> EntityListResponse:
|
|
"""Load multiple entities by their permalinks.
|
|
|
|
Args:
|
|
request: OpenNodesRequest containing list of permalinks to load
|
|
|
|
Returns:
|
|
EntityListResponse containing complete details for each requested entity
|
|
"""
|
|
url = "/knowledge/entities"
|
|
response = await call_get(
|
|
client, url, params=[("permalink", permalink) for permalink in request.permalinks]
|
|
)
|
|
return EntityListResponse.model_validate(response.json())
|
|
|
|
|
|
@mcp.tool(
|
|
description="Permanently delete entities and all related content (observations and relations)",
|
|
)
|
|
async def delete_entities(request: DeleteEntitiesRequest) -> DeleteEntitiesResponse:
|
|
"""Delete entities from the knowledge graph."""
|
|
url = "/knowledge/entities/delete"
|
|
response = await call_post(client, url, json=request.model_dump())
|
|
return DeleteEntitiesResponse.model_validate(response.json())
|