Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
86 changes: 86 additions & 0 deletions manifest.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
{
"manifest_version": "0.3",
"name": "memU",
"display_name": "memU - AI Memory Service",
"version": "1.0.0",
"description": "memU is a memory framework built for 24/7 proactive agents. It is designed for long-running use and greatly reduces the LLM token cost of keeping agents always online, making always-on, evolving agents practical in production systems. memU continuously captures and understands user intent. Even without a command, the agent can tell what you are about to do and act on it by itself.",
"author": {
"name": "NevaMind-AI",
"email": "jinshen.yin@nevamind.ai"
},
"homepage": "https://github.com/NevaMind-AI/memU",
"documentation": "https://memu.pro/docs",
"server": {
"type": "python",
"entry_point": "src/memu/integrations/mcp.py",
"mcp_config": {
"command": "uvx",
"args": [
"--from",
"memu-py[mcp] @ git+https://github.com/De13ruyne/memU@feat/add_mcp",
"memu-mcp"
],
"env": {
"OPENAI_API_KEY": "${user_config.api_key}"
}
}
},
"tools": [
{
"name": "memorize",
"description": "Save conversations, documents, or knowledge to memory"
},
{
"name": "retrieve",
"description": "Search for relevant memories based on a query"
},
{
"name": "list_memories",
"description": "List all stored memory items for a user"
},
{
"name": "list_categories",
"description": "List all memory categories for a user"
},
{
"name": "create_memory",
"description": "Manually create a memory item"
},
{
"name": "update_memory",
"description": "Update an existing memory item"
},
{
"name": "delete_memory",
"description": "Delete a specific memory item"
},
{
"name": "clear_memory",
"description": "Clear all memories for a user"
}
],
"user_config": {
"api_key": {
"type": "string",
"title": "LLM API Key",
"description": "OpenAI-compatible API key for chat and embedding",
"required": true,
"sensitive": true
}
},
"keywords": [
"memory",
"ai",
"agent",
"llm",
"conversation",
"knowledge",
"proactive",
"mcp"
],
"license": "MIT",
"repository": {
"type": "git",
"url": "https://github.com/NevaMind-AI/memU"
}
}
13 changes: 12 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ test = [
postgres = ["pgvector>=0.3.4", "sqlalchemy[postgresql-psycopgbinary]>=2.0.36"]
langgraph = ["langgraph>=0.0.10", "langchain-core>=0.1.0"]
claude = ["claude-agent-sdk>=0.1.24"]
mcp = ["mcp>=1.0", "python-dotenv>=1.0"]

[project.urls]
"Homepage" = "https://github.com/NevaMind-AI/MemU"
Expand All @@ -78,10 +79,12 @@ claude = ["claude-agent-sdk>=0.1.24"]

[project.scripts]
memu-server = "memu.server.cli:main"
memu-mcp = "memu.integrations.mcp:main"

[tool.deptry.per_rule_ignores]
DEP001 = ["dotenv"]
# Optional dependencies used in examples/
DEP002 = ["claude-agent-sdk"]
DEP002 = ["claude-agent-sdk", "mcp", "python-dotenv"]

[tool.mypy]
files = ["src", "tests"]
Expand Down Expand Up @@ -109,6 +112,14 @@ ignore_missing_imports = true
module = ["pgvector.*"]
ignore_missing_imports = true

[[tool.mypy.overrides]]
module = ["mcp.*"]
ignore_missing_imports = true

[[tool.mypy.overrides]]
module = ["dotenv.*"]
ignore_missing_imports = true

[[tool.mypy.overrides]]
module = ["memu.client.openai_wrapper"]
disallow_untyped_defs = false
Expand Down
1 change: 1 addition & 0 deletions src/memu/app/crud.py
Original file line number Diff line number Diff line change
Expand Up @@ -510,6 +510,7 @@ async def _patch_create_memory_item(self, state: WorkflowState, step_context: An
content_embedding = (await self._get_step_embedding_client(step_context).embed(embed_payload))[0]

item = store.memory_item_repo.create_item(
resource_id="",
memory_type=memory_payload["type"],
summary=memory_payload["content"],
embedding=content_embedding,
Expand Down
12 changes: 11 additions & 1 deletion src/memu/integrations/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,13 @@
from .langgraph import MemULangGraphTools
from typing import Any


def __getattr__(name: str) -> Any:
if name == "MemULangGraphTools":
from .langgraph import MemULangGraphTools

return MemULangGraphTools
msg = f"module {__name__!r} has no attribute {name!r}"
raise AttributeError(msg)


__all__ = ["MemULangGraphTools"]
Loading