André Oliveira commited on
Commit
7f8656a
·
1 Parent(s): 170863a

added tool mcp upload

Browse files
Files changed (1) hide show
  1. app.py +40 -0
app.py CHANGED
@@ -89,6 +89,32 @@ def model_to_json(model_cls) -> str:
89
  return json.dumps({k: v.default for k, v in model_cls.__fields__.items()}, indent=2)
90
 
91
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
92
  # Default inputs
93
  DEFAULT_UPLOAD_PATH = "data/docs"
94
  DEFAULT_OPTIMIZE_JSON = model_to_json(OptimizeRequest)
@@ -141,6 +167,20 @@ with gr.Blocks(theme=gr.themes.Soft()) as demo:
141
  gr.Markdown("---")
142
 
143
  if __name__ == "__main__":
 
 
 
 
 
 
 
 
 
 
 
 
 
 
144
  demo.launch(
145
  server_name="0.0.0.0",
146
  server_port=7860,
 
89
  return json.dumps({k: v.default for k, v in model_cls.__fields__.items()}, indent=2)
90
 
91
 
92
+ def upload_docs_tool_mcp(payload: str, files=None):
93
+ """
94
+ 📦 Upload documents to the server's docs folder via FastAPI /upload_docs.
95
+ Accepts:
96
+ - attached file(s) from Cursor MCP agent
97
+ - 'docs_path' in JSON payload
98
+ """
99
+ data = json.loads(payload) if payload else {}
100
+ docs_path = data.get("docs_path", DEFAULT_UPLOAD_PATH)
101
+
102
+ if not files:
103
+ return {"error": "No files provided to upload_docs_tool_mcp"}
104
+
105
+ os.makedirs(docs_path, exist_ok=True)
106
+
107
+ files_payload = [("files", (f.name, f, "application/octet-stream")) for f in files]
108
+
109
+ resp = requests.post(
110
+ f"{BASE_INTERNAL}/upload_docs",
111
+ files=files_payload,
112
+ data={"docs_path": docs_path}
113
+ )
114
+
115
+ return resp.json()
116
+
117
+
118
  # Default inputs
119
  DEFAULT_UPLOAD_PATH = "data/docs"
120
  DEFAULT_OPTIMIZE_JSON = model_to_json(OptimizeRequest)
 
167
  gr.Markdown("---")
168
 
169
  if __name__ == "__main__":
170
+ # Register MCP tools
171
+ demo.add_mcp_tool(
172
+ name="ragmint_upload_docs_mcp",
173
+ func=upload_docs_tool_mcp,
174
+ description="📂 Upload documents to data/docs for use in RAG optimization and autotuning",
175
+ parameters={
176
+ "type": "object",
177
+ "properties": {
178
+ "docs_path": {"type": "string", "description": "Target directory for uploaded docs"}
179
+ }
180
+ },
181
+ file_input=True # <<< enables file attachments from Cursor
182
+ )
183
+
184
  demo.launch(
185
  server_name="0.0.0.0",
186
  server_port=7860,