remdb 0.3.242__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of remdb might be problematic. Click here for more details.

Files changed (235) hide show
  1. rem/__init__.py +129 -0
  2. rem/agentic/README.md +760 -0
  3. rem/agentic/__init__.py +54 -0
  4. rem/agentic/agents/README.md +155 -0
  5. rem/agentic/agents/__init__.py +38 -0
  6. rem/agentic/agents/agent_manager.py +311 -0
  7. rem/agentic/agents/sse_simulator.py +502 -0
  8. rem/agentic/context.py +425 -0
  9. rem/agentic/context_builder.py +360 -0
  10. rem/agentic/llm_provider_models.py +301 -0
  11. rem/agentic/mcp/__init__.py +0 -0
  12. rem/agentic/mcp/tool_wrapper.py +273 -0
  13. rem/agentic/otel/__init__.py +5 -0
  14. rem/agentic/otel/setup.py +240 -0
  15. rem/agentic/providers/phoenix.py +926 -0
  16. rem/agentic/providers/pydantic_ai.py +854 -0
  17. rem/agentic/query.py +117 -0
  18. rem/agentic/query_helper.py +89 -0
  19. rem/agentic/schema.py +737 -0
  20. rem/agentic/serialization.py +245 -0
  21. rem/agentic/tools/__init__.py +5 -0
  22. rem/agentic/tools/rem_tools.py +242 -0
  23. rem/api/README.md +657 -0
  24. rem/api/deps.py +253 -0
  25. rem/api/main.py +460 -0
  26. rem/api/mcp_router/prompts.py +182 -0
  27. rem/api/mcp_router/resources.py +820 -0
  28. rem/api/mcp_router/server.py +243 -0
  29. rem/api/mcp_router/tools.py +1605 -0
  30. rem/api/middleware/tracking.py +172 -0
  31. rem/api/routers/admin.py +520 -0
  32. rem/api/routers/auth.py +898 -0
  33. rem/api/routers/chat/__init__.py +5 -0
  34. rem/api/routers/chat/child_streaming.py +394 -0
  35. rem/api/routers/chat/completions.py +702 -0
  36. rem/api/routers/chat/json_utils.py +76 -0
  37. rem/api/routers/chat/models.py +202 -0
  38. rem/api/routers/chat/otel_utils.py +33 -0
  39. rem/api/routers/chat/sse_events.py +546 -0
  40. rem/api/routers/chat/streaming.py +950 -0
  41. rem/api/routers/chat/streaming_utils.py +327 -0
  42. rem/api/routers/common.py +18 -0
  43. rem/api/routers/dev.py +87 -0
  44. rem/api/routers/feedback.py +276 -0
  45. rem/api/routers/messages.py +620 -0
  46. rem/api/routers/models.py +86 -0
  47. rem/api/routers/query.py +362 -0
  48. rem/api/routers/shared_sessions.py +422 -0
  49. rem/auth/README.md +258 -0
  50. rem/auth/__init__.py +36 -0
  51. rem/auth/jwt.py +367 -0
  52. rem/auth/middleware.py +318 -0
  53. rem/auth/providers/__init__.py +16 -0
  54. rem/auth/providers/base.py +376 -0
  55. rem/auth/providers/email.py +215 -0
  56. rem/auth/providers/google.py +163 -0
  57. rem/auth/providers/microsoft.py +237 -0
  58. rem/cli/README.md +517 -0
  59. rem/cli/__init__.py +8 -0
  60. rem/cli/commands/README.md +299 -0
  61. rem/cli/commands/__init__.py +3 -0
  62. rem/cli/commands/ask.py +549 -0
  63. rem/cli/commands/cluster.py +1808 -0
  64. rem/cli/commands/configure.py +495 -0
  65. rem/cli/commands/db.py +828 -0
  66. rem/cli/commands/dreaming.py +324 -0
  67. rem/cli/commands/experiments.py +1698 -0
  68. rem/cli/commands/mcp.py +66 -0
  69. rem/cli/commands/process.py +388 -0
  70. rem/cli/commands/query.py +109 -0
  71. rem/cli/commands/scaffold.py +47 -0
  72. rem/cli/commands/schema.py +230 -0
  73. rem/cli/commands/serve.py +106 -0
  74. rem/cli/commands/session.py +453 -0
  75. rem/cli/dreaming.py +363 -0
  76. rem/cli/main.py +123 -0
  77. rem/config.py +244 -0
  78. rem/mcp_server.py +41 -0
  79. rem/models/core/__init__.py +49 -0
  80. rem/models/core/core_model.py +70 -0
  81. rem/models/core/engram.py +333 -0
  82. rem/models/core/experiment.py +672 -0
  83. rem/models/core/inline_edge.py +132 -0
  84. rem/models/core/rem_query.py +246 -0
  85. rem/models/entities/__init__.py +68 -0
  86. rem/models/entities/domain_resource.py +38 -0
  87. rem/models/entities/feedback.py +123 -0
  88. rem/models/entities/file.py +57 -0
  89. rem/models/entities/image_resource.py +88 -0
  90. rem/models/entities/message.py +64 -0
  91. rem/models/entities/moment.py +123 -0
  92. rem/models/entities/ontology.py +181 -0
  93. rem/models/entities/ontology_config.py +131 -0
  94. rem/models/entities/resource.py +95 -0
  95. rem/models/entities/schema.py +87 -0
  96. rem/models/entities/session.py +84 -0
  97. rem/models/entities/shared_session.py +180 -0
  98. rem/models/entities/subscriber.py +175 -0
  99. rem/models/entities/user.py +93 -0
  100. rem/py.typed +0 -0
  101. rem/registry.py +373 -0
  102. rem/schemas/README.md +507 -0
  103. rem/schemas/__init__.py +6 -0
  104. rem/schemas/agents/README.md +92 -0
  105. rem/schemas/agents/core/agent-builder.yaml +235 -0
  106. rem/schemas/agents/core/moment-builder.yaml +178 -0
  107. rem/schemas/agents/core/rem-query-agent.yaml +226 -0
  108. rem/schemas/agents/core/resource-affinity-assessor.yaml +99 -0
  109. rem/schemas/agents/core/simple-assistant.yaml +19 -0
  110. rem/schemas/agents/core/user-profile-builder.yaml +163 -0
  111. rem/schemas/agents/examples/contract-analyzer.yaml +317 -0
  112. rem/schemas/agents/examples/contract-extractor.yaml +134 -0
  113. rem/schemas/agents/examples/cv-parser.yaml +263 -0
  114. rem/schemas/agents/examples/hello-world.yaml +37 -0
  115. rem/schemas/agents/examples/query.yaml +54 -0
  116. rem/schemas/agents/examples/simple.yaml +21 -0
  117. rem/schemas/agents/examples/test.yaml +29 -0
  118. rem/schemas/agents/rem.yaml +132 -0
  119. rem/schemas/evaluators/hello-world/default.yaml +77 -0
  120. rem/schemas/evaluators/rem/faithfulness.yaml +219 -0
  121. rem/schemas/evaluators/rem/lookup-correctness.yaml +182 -0
  122. rem/schemas/evaluators/rem/retrieval-precision.yaml +199 -0
  123. rem/schemas/evaluators/rem/retrieval-recall.yaml +211 -0
  124. rem/schemas/evaluators/rem/search-correctness.yaml +192 -0
  125. rem/services/__init__.py +18 -0
  126. rem/services/audio/INTEGRATION.md +308 -0
  127. rem/services/audio/README.md +376 -0
  128. rem/services/audio/__init__.py +15 -0
  129. rem/services/audio/chunker.py +354 -0
  130. rem/services/audio/transcriber.py +259 -0
  131. rem/services/content/README.md +1269 -0
  132. rem/services/content/__init__.py +5 -0
  133. rem/services/content/providers.py +760 -0
  134. rem/services/content/service.py +762 -0
  135. rem/services/dreaming/README.md +230 -0
  136. rem/services/dreaming/__init__.py +53 -0
  137. rem/services/dreaming/affinity_service.py +322 -0
  138. rem/services/dreaming/moment_service.py +251 -0
  139. rem/services/dreaming/ontology_service.py +54 -0
  140. rem/services/dreaming/user_model_service.py +297 -0
  141. rem/services/dreaming/utils.py +39 -0
  142. rem/services/email/__init__.py +10 -0
  143. rem/services/email/service.py +522 -0
  144. rem/services/email/templates.py +360 -0
  145. rem/services/embeddings/__init__.py +11 -0
  146. rem/services/embeddings/api.py +127 -0
  147. rem/services/embeddings/worker.py +435 -0
  148. rem/services/fs/README.md +662 -0
  149. rem/services/fs/__init__.py +62 -0
  150. rem/services/fs/examples.py +206 -0
  151. rem/services/fs/examples_paths.py +204 -0
  152. rem/services/fs/git_provider.py +935 -0
  153. rem/services/fs/local_provider.py +760 -0
  154. rem/services/fs/parsing-hooks-examples.md +172 -0
  155. rem/services/fs/paths.py +276 -0
  156. rem/services/fs/provider.py +460 -0
  157. rem/services/fs/s3_provider.py +1042 -0
  158. rem/services/fs/service.py +186 -0
  159. rem/services/git/README.md +1075 -0
  160. rem/services/git/__init__.py +17 -0
  161. rem/services/git/service.py +469 -0
  162. rem/services/phoenix/EXPERIMENT_DESIGN.md +1146 -0
  163. rem/services/phoenix/README.md +453 -0
  164. rem/services/phoenix/__init__.py +46 -0
  165. rem/services/phoenix/client.py +960 -0
  166. rem/services/phoenix/config.py +88 -0
  167. rem/services/phoenix/prompt_labels.py +477 -0
  168. rem/services/postgres/README.md +757 -0
  169. rem/services/postgres/__init__.py +49 -0
  170. rem/services/postgres/diff_service.py +599 -0
  171. rem/services/postgres/migration_service.py +427 -0
  172. rem/services/postgres/programmable_diff_service.py +635 -0
  173. rem/services/postgres/pydantic_to_sqlalchemy.py +562 -0
  174. rem/services/postgres/register_type.py +353 -0
  175. rem/services/postgres/repository.py +481 -0
  176. rem/services/postgres/schema_generator.py +661 -0
  177. rem/services/postgres/service.py +802 -0
  178. rem/services/postgres/sql_builder.py +355 -0
  179. rem/services/rate_limit.py +113 -0
  180. rem/services/rem/README.md +318 -0
  181. rem/services/rem/__init__.py +23 -0
  182. rem/services/rem/exceptions.py +71 -0
  183. rem/services/rem/executor.py +293 -0
  184. rem/services/rem/parser.py +180 -0
  185. rem/services/rem/queries.py +196 -0
  186. rem/services/rem/query.py +371 -0
  187. rem/services/rem/service.py +608 -0
  188. rem/services/session/README.md +374 -0
  189. rem/services/session/__init__.py +13 -0
  190. rem/services/session/compression.py +488 -0
  191. rem/services/session/pydantic_messages.py +310 -0
  192. rem/services/session/reload.py +85 -0
  193. rem/services/user_service.py +130 -0
  194. rem/settings.py +1877 -0
  195. rem/sql/background_indexes.sql +52 -0
  196. rem/sql/migrations/001_install.sql +983 -0
  197. rem/sql/migrations/002_install_models.sql +3157 -0
  198. rem/sql/migrations/003_optional_extensions.sql +326 -0
  199. rem/sql/migrations/004_cache_system.sql +282 -0
  200. rem/sql/migrations/005_schema_update.sql +145 -0
  201. rem/sql/migrations/migrate_session_id_to_uuid.sql +45 -0
  202. rem/utils/AGENTIC_CHUNKING.md +597 -0
  203. rem/utils/README.md +628 -0
  204. rem/utils/__init__.py +61 -0
  205. rem/utils/agentic_chunking.py +622 -0
  206. rem/utils/batch_ops.py +343 -0
  207. rem/utils/chunking.py +108 -0
  208. rem/utils/clip_embeddings.py +276 -0
  209. rem/utils/constants.py +97 -0
  210. rem/utils/date_utils.py +228 -0
  211. rem/utils/dict_utils.py +98 -0
  212. rem/utils/embeddings.py +436 -0
  213. rem/utils/examples/embeddings_example.py +305 -0
  214. rem/utils/examples/sql_types_example.py +202 -0
  215. rem/utils/files.py +323 -0
  216. rem/utils/markdown.py +16 -0
  217. rem/utils/mime_types.py +158 -0
  218. rem/utils/model_helpers.py +492 -0
  219. rem/utils/schema_loader.py +649 -0
  220. rem/utils/sql_paths.py +146 -0
  221. rem/utils/sql_types.py +350 -0
  222. rem/utils/user_id.py +81 -0
  223. rem/utils/vision.py +325 -0
  224. rem/workers/README.md +506 -0
  225. rem/workers/__init__.py +7 -0
  226. rem/workers/db_listener.py +579 -0
  227. rem/workers/db_maintainer.py +74 -0
  228. rem/workers/dreaming.py +502 -0
  229. rem/workers/engram_processor.py +312 -0
  230. rem/workers/sqs_file_processor.py +193 -0
  231. rem/workers/unlogged_maintainer.py +463 -0
  232. remdb-0.3.242.dist-info/METADATA +1632 -0
  233. remdb-0.3.242.dist-info/RECORD +235 -0
  234. remdb-0.3.242.dist-info/WHEEL +4 -0
  235. remdb-0.3.242.dist-info/entry_points.txt +2 -0
@@ -0,0 +1,243 @@
1
+ """
2
+ MCP server creation and configuration for REM.
3
+
4
+ Design Pattern
5
+ 1. Create FastMCP server with tools and resources
6
+ 2. Register tools using @mcp.tool() decorator
7
+ 3. Register resources using resource registration functions
8
+ 4. Mount on FastAPI at /api/v1/mcp
9
+ 5. Support both HTTP and SSE transports
10
+
11
+ Key Concepts:
12
+ - Tools: Functions LLM can call (search, query, parse, etc.)
13
+ - Resources: Read-only data sources (entity lookups, schema docs, etc.)
14
+ - Instructions: System-level guidance for LLM on how to use MCP server
15
+
16
+ FastMCP Features:
17
+ - Stateless HTTP mode (stateless_http=True) prevents stale session errors
18
+ - Path="/" creates routes at root, then mount at custom path
19
+ - Built-in auth that can be disabled for testing
20
+ """
21
+
22
+ import importlib.metadata
23
+ from functools import wraps
24
+
25
+ from fastmcp import FastMCP
26
+ from loguru import logger
27
+
28
+ from ...settings import settings
29
+ from .prompts import register_prompts
30
+ from .resources import (
31
+ register_agent_resources,
32
+ register_file_resources,
33
+ register_schema_resources,
34
+ register_status_resources,
35
+ )
36
+ from .tools import (
37
+ ask_agent,
38
+ ask_rem_agent,
39
+ get_schema,
40
+ ingest_into_rem,
41
+ list_schema,
42
+ read_resource,
43
+ register_metadata,
44
+ save_agent,
45
+ search_rem,
46
+ test_error_handling,
47
+ )
48
+
49
+ # Get package version
50
+ try:
51
+ __version__ = importlib.metadata.version("remdb")
52
+ except importlib.metadata.PackageNotFoundError:
53
+ __version__ = "0.0.0-dev"
54
+
55
+
56
+ def create_mcp_server(is_local: bool = False) -> FastMCP:
57
+ """
58
+ Create and configure the REM MCP server with all tools and resources.
59
+
60
+ Args:
61
+ is_local: True if running as local/stdio server (enables file ingestion from local paths)
62
+
63
+ Returns:
64
+ Configured FastMCP server instance
65
+
66
+ Usage Modes:
67
+ # Stdio mode (for local dev / Claude Desktop)
68
+ mcp = create_mcp_server(is_local=True)
69
+ mcp.run(transport="stdio")
70
+
71
+ # HTTP mode (for production / API)
72
+ mcp = create_mcp_server(is_local=False)
73
+ mcp_app = mcp.http_app(path="/", transport="http", stateless_http=True)
74
+ # Then mount: app.mount("/api/v1/mcp", mcp_app)
75
+
76
+ Design Pattern
77
+ - Instructions provide LLM guidance on workflow
78
+ - Tools implement specific operations
79
+ - Resources provide read-only access to data
80
+ - All modular and testable
81
+ """
82
+ mcp = FastMCP(
83
+ name=f"REM MCP Server ({settings.team}/{settings.environment})",
84
+ version=__version__,
85
+ instructions=(
86
+ "REM (Resource-Entity-Moment) MCP Server - Unified memory infrastructure for agentic systems.\n\n"
87
+ "═══════════════════════════════════════════════════════════════════════════\n"
88
+ "REM QUERY WORKFLOW - Schema-Agnostic Natural Language Queries\n"
89
+ "═══════════════════════════════════════════════════════════════════════════\n"
90
+ "\n"
91
+ "**IMPORTANT:** REM uses natural language labels, NOT UUIDs. You query with:\n"
92
+ "- LOOKUP \"Sarah Chen\" (what user knows)\n"
93
+ "- NOT LOOKUP \"sarah-chen-uuid-1234\" (internal ID)\n"
94
+ "\n"
95
+ "REM Query Types:\n"
96
+ "\n"
97
+ "1. LOOKUP - O(1) entity resolution across ALL tables\n"
98
+ " Example: LOOKUP \"Sarah Chen\"\n"
99
+ " Returns: All entities named \"Sarah Chen\" (resources, moments, users)\n"
100
+ "\n"
101
+ "2. FUZZY - Indexed fuzzy text matching\n"
102
+ " Example: FUZZY \"sara\" threshold=0.7\n"
103
+ " Returns: \"Sarah Chen\", \"Sara Martinez\", etc.\n"
104
+ "\n"
105
+ "3. SEARCH - Semantic vector search (table-specific)\n"
106
+ " Example: SEARCH \"database migration\" table=resources\n"
107
+ " Returns: Semantically similar resources\n"
108
+ "\n"
109
+ "4. SQL - Direct table queries with WHERE clauses\n"
110
+ " Example: SQL table=moments WHERE moment_type='meeting'\n"
111
+ " Returns: All meeting moments\n"
112
+ "\n"
113
+ "5. TRAVERSE - Multi-hop graph traversal\n"
114
+ " Example: TRAVERSE manages WITH LOOKUP \"Sally\" DEPTH 2\n"
115
+ " Returns: Sally + her team hierarchy\n"
116
+ "\n"
117
+ "═══════════════════════════════════════════════════════════════════════════\n"
118
+ "ITERATED RETRIEVAL PATTERN - Multi-Turn Exploration\n"
119
+ "═══════════════════════════════════════════════════════════════════════════\n"
120
+ "\n"
121
+ "REM is designed for multi-turn exploration, not single-shot queries:\n"
122
+ "\n"
123
+ "Turn 1: Find entry point\n"
124
+ " LOOKUP \"Sarah Chen\"\n"
125
+ " → Found person entity with 3 graph edges\n"
126
+ "\n"
127
+ "Turn 2: Analyze neighborhood (PLAN mode - depth 0)\n"
128
+ " ask_rem(\"What are Sarah Chen's connections?\", plan_mode=True)\n"
129
+ " → Agent uses TRAVERSE with max_depth=0\n"
130
+ " → Edge summary: manages(2), authored_by(15), mentors(3)\n"
131
+ "\n"
132
+ "Turn 3: Selective traversal\n"
133
+ " ask_rem(\"Show Sarah Chen's team hierarchy\")\n"
134
+ " → Agent uses TRAVERSE with rel_type=\"manages\", max_depth=2\n"
135
+ " → Returns: Sarah + team hierarchy (depth 2)\n"
136
+ "\n"
137
+ "Turn 4: Follow reference chain\n"
138
+ " TRAVERSE references,builds-on WITH LOOKUP \"api-design-v2\" DEPTH 1\n"
139
+ " → Returns: Design lineage\n"
140
+ "\n"
141
+ "**Key Concepts:**\n"
142
+ "- Depth 0 = PLAN mode (analyze edges without traversal)\n"
143
+ "- Depth 1+ = Full traversal with cycle detection\n"
144
+ "- Plan memo = Agent scratchpad for multi-turn tracking\n"
145
+ "- Edge filters = Selective relationship types\n"
146
+ "\n"
147
+ "═══════════════════════════════════════════════════════════════════════════\n"
148
+ "AVAILABLE TOOLS\n"
149
+ "═══════════════════════════════════════════════════════════════════════════\n"
150
+ "\n"
151
+ "• search_rem - Execute REM queries (LOOKUP, FUZZY, SEARCH, SQL, TRAVERSE)\n"
152
+ "• ask_rem_agent - Natural language to REM query conversion\n"
153
+ " - plan_mode=True: Hints agent to use TRAVERSE with depth=0 for edge analysis\n"
154
+ "• ingest_into_rem - Ingest files from local paths (local server only), s3://, or https://\n"
155
+ "• list_schema - List all database schemas (tables) with row counts\n"
156
+ "• get_schema - Get detailed schema for a specific table (columns, types, indexes)\n"
157
+ "\n"
158
+ "═══════════════════════════════════════════════════════════════════════════\n"
159
+ "AVAILABLE RESOURCES (Read-Only)\n"
160
+ "═══════════════════════════════════════════════════════════════════════════\n"
161
+ "\n"
162
+ "Schema Information:\n"
163
+ "• rem://schema/entities - Entity schemas (Resource, Message, User, File, Moment)\n"
164
+ "• rem://schema/query-types - REM query type documentation\n"
165
+ "\n"
166
+ "Agent Schemas:\n"
167
+ "• rem://agents - List available agent schemas with descriptions and usage\n"
168
+ "\n"
169
+ "File Operations:\n"
170
+ "• rem://files/presigned-url - Generate presigned S3 URLs for file download\n"
171
+ "\n"
172
+ "System Status:\n"
173
+ "• rem://status - System health and statistics\n"
174
+ "\n"
175
+ "**Quick Start:**\n"
176
+ "1. User: \"Who is Sarah?\"\n"
177
+ " → Call: search_rem(query_type=\"lookup\", entity_key=\"Sarah\", user_id=\"...\")\n"
178
+ "\n"
179
+ "2. User: \"Find documents about database migration\"\n"
180
+ " → Call: search_rem(query_type=\"search\", query_text=\"database migration\", table=\"resources\", user_id=\"...\")\n"
181
+ "\n"
182
+ "3. User: \"Who reports to Sally?\"\n"
183
+ " → Call: search_rem(query_type=\"traverse\", initial_query=\"Sally\", edge_types=[\"reports-to\"], depth=2, user_id=\"...\")\n"
184
+ "\n"
185
+ "4. User: \"Show me Sarah's org chart\" (Multi-turn example)\n"
186
+ " → Turn 1: search_rem(query_type=\"lookup\", entity_key=\"Sarah\", user_id=\"...\")\n"
187
+ " → Turn 2: search_rem(query_type=\"traverse\", initial_query=\"Sarah\", depth=0, user_id=\"...\") # PLAN mode\n"
188
+ " → Turn 3: search_rem(query_type=\"traverse\", initial_query=\"Sarah\", edge_types=[\"manages\", \"reports-to\"], depth=2, user_id=\"...\")\n"
189
+ "\n"
190
+ "5. User: \"What did we discuss last week about the TiDB migration?\"\n"
191
+ " → Call: ask_rem_agent(query=\"What did we discuss last week about the TiDB migration?\", user_id=\"...\")\n"
192
+ "\n"
193
+ "6. User: \"Ingest this PDF file\"\n"
194
+ " → Call: ingest_into_rem(file_uri=\"s3://bucket/file.pdf\", user_id=\"...\")\n"
195
+ ),
196
+ )
197
+
198
+ # Register core REM tools
199
+ mcp.tool()(search_rem)
200
+ mcp.tool()(ask_rem_agent)
201
+ mcp.tool()(read_resource)
202
+ mcp.tool()(register_metadata)
203
+ mcp.tool()(list_schema)
204
+ mcp.tool()(get_schema)
205
+ mcp.tool()(save_agent)
206
+
207
+ # Register multi-agent tools
208
+ mcp.tool()(ask_agent)
209
+
210
+ # Register test tool only in development environment (not staging/production)
211
+ if settings.environment not in ("staging", "production"):
212
+ mcp.tool()(test_error_handling)
213
+ logger.debug("Registered test_error_handling tool (dev environment only)")
214
+
215
+ # File ingestion tool (with local path support for local servers)
216
+ # Wrap to inject is_local parameter
217
+ @wraps(ingest_into_rem)
218
+ async def ingest_into_rem_wrapper(
219
+ file_uri: str,
220
+ user_id: str | None = None,
221
+ category: str | None = None,
222
+ tags: list[str] | None = None,
223
+ ):
224
+ return await ingest_into_rem(
225
+ file_uri=file_uri,
226
+ user_id=user_id,
227
+ category=category,
228
+ tags=tags,
229
+ is_local_server=is_local,
230
+ )
231
+
232
+ mcp.tool()(ingest_into_rem_wrapper)
233
+
234
+ # Register prompts
235
+ register_prompts(mcp)
236
+
237
+ # Register schema resources
238
+ register_schema_resources(mcp)
239
+ register_agent_resources(mcp)
240
+ register_file_resources(mcp)
241
+ register_status_resources(mcp)
242
+
243
+ return mcp