Qdrant Ingest Manifest
Immutable Catalog Entry
This descriptor comes from the active versioned Portal catalog.
- Contract tier:
legacy - Risk:
write - Catalog version:
qdrant-2026.07.12.2 - Descriptor hash:
f92145afa1d22090f042c930da010edd5e2ba5afe67ce6dbacaf349c87d27981
Use this when you need to run the legacy generic alias for the typed school-manifest ingest workflow. It creates or extends Qdrant or MCP-managed state without deleting existing provider data by default. It contacts the configured Qdrant service or uses MCP-owned job/upload state. Returns normalized provider data in data plus safe request and trace metadata in meta. Requires an authenticated MAD MCP Portal request and any provider configuration named by the input schema. Prefer its typed replacement when one is available because this tool remains in the legacy tier.
Request Body
{
"jsonrpc": "2.0",
"id": "qdrant-qdrant-ingest-manifest-example",
"method": "tools/call",
"params": {
"name": "qdrant.qdrant-ingest-manifest",
"arguments": {
"manifest": [],
"ocr": false,
"verify": false,
"chunk_size": "",
"chunk_overlap": "",
"dedupe_action": "",
"stop_on_error": false,
"collection_name": "",
"default_metadata": "",
"verification_top_k": 1
}
}
}
Arguments Schema
{
"type": "object",
"title": "Qdrant Ingest Manifest input",
"required": [
"manifest"
],
"properties": {
"ocr": {
"type": "boolean",
"title": "Ocr",
"default": true,
"description": "Default OCR setting for PDF items."
},
"verify": {
"type": "boolean",
"title": "Verify",
"default": true,
"description": "Run compact study-search verification for each successfully ingested or skipped item."
},
"manifest": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
},
"title": "Manifest",
"description": "List of SCHOOL capture items. Each item may include text, content_base64, source_url/upload://, file metadata, doc_id, title, class_code, module, week, status, material_type, and metadata overrides."
},
"chunk_size": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Chunk Size",
"default": null,
"description": "Default chunk size for items that do not set chunk_size."
},
"chunk_overlap": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Chunk Overlap",
"default": null,
"description": "Default chunk overlap for items that do not set chunk_overlap."
},
"dedupe_action": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Dedupe Action",
"default": null,
"description": "Default document dedupe behavior: update or skip."
},
"stop_on_error": {
"type": "boolean",
"title": "Stop On Error",
"default": false,
"description": "Stop after the first item failure instead of returning partial results."
},
"collection_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Collection Name",
"default": null,
"description": "School collection to ingest into. Defaults to MCP_STUDY_COLLECTION."
},
"default_metadata": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Default Metadata",
"default": null,
"description": "Metadata applied to every manifest item before item-level metadata and top-level school fields are merged."
},
"verification_top_k": {
"type": "integer",
"title": "Verification Top K",
"default": 3,
"description": "Max compact verification matches per item."
},
"verification_min_score": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Verification Min Score",
"default": null,
"description": "Optional minimum score for verification matches."
}
},
"description": "Validated input contract for the qdrant-ingest-manifest native Qdrant MCP tool."
}
Output Schema
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"data",
"meta"
],
"properties": {
"data": {
"type": "object",
"description": "Normalized result data for qdrant-ingest-manifest: run the legacy generic alias for the typed school-manifest ingest workflow.",
"additionalProperties": true
},
"meta": {
"type": "object",
"properties": {
"bytes_in": {
"type": "integer",
"description": "Approximate serialized input byte count."
},
"warnings": {
"type": "array",
"items": {
"type": "string"
},
"description": "Safe recovery warnings."
},
"bytes_out": {
"type": "integer",
"description": "Approximate serialized output byte count."
},
"elapsed_ms": {
"type": "integer",
"description": "Tool execution time in milliseconds."
},
"request_id": {
"type": "string",
"description": "Stable request trace identifier."
},
"server_version": {
"type": "string",
"description": "Deployed source revision when available."
},
"serialization_ms": {
"type": "integer",
"description": "Response serialization time in milliseconds."
},
"server_uptime_ms": {
"type": "integer",
"description": "Server process uptime in milliseconds."
},
"server_instance_id": {
"type": "string",
"description": "Ephemeral server-process identifier."
}
},
"description": "Secret-safe request, trace, size, timing, and warning metadata.",
"additionalProperties": true
}
},
"description": "Qdrant MCP normalized response envelope.",
"additionalProperties": false
}
Code Examples
- cURL
- Node.js
- Python
curl -X POST 'https://portal.madpanda3d.com/api/mcp' \
-H 'Authorization: Bearer mad_live_***' \
-H 'Content-Type: application/json' \
-d '{
"jsonrpc": "2.0",
"id": "qdrant-qdrant-ingest-manifest-example",
"method": "tools/call",
"params": {
"name": "qdrant.qdrant-ingest-manifest",
"arguments": {
"manifest": [],
"ocr": false,
"verify": false,
"chunk_size": "",
"chunk_overlap": "",
"dedupe_action": "",
"stop_on_error": false,
"collection_name": "",
"default_metadata": "",
"verification_top_k": 1
}
}
}'
const response = await fetch('https://portal.madpanda3d.com/api/mcp', {
method: 'POST',
headers: {
Authorization: 'Bearer mad_live_***',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"jsonrpc": "2.0",
"id": "qdrant-qdrant-ingest-manifest-example",
"method": "tools/call",
"params": {
"name": "qdrant.qdrant-ingest-manifest",
"arguments": {
"manifest": [],
"ocr": false,
"verify": false,
"chunk_size": "",
"chunk_overlap": "",
"dedupe_action": "",
"stop_on_error": false,
"collection_name": "",
"default_metadata": "",
"verification_top_k": 1
}
}
}),
});
const data = await response.json();
console.log(data);
import requests
url = 'https://portal.madpanda3d.com/api/mcp'
headers = {
'Authorization': 'Bearer mad_live_***',
'Content-Type': 'application/json',
}
payload = {
"jsonrpc": "2.0",
"id": "qdrant-qdrant-ingest-manifest-example",
"method": "tools/call",
"params": {
"name": "qdrant.qdrant-ingest-manifest",
"arguments": {
"manifest": [],
"ocr": false,
"verify": false,
"chunk_size": "",
"chunk_overlap": "",
"dedupe_action": "",
"stop_on_error": false,
"collection_name": "",
"default_metadata": "",
"verification_top_k": 1
}
}
}
response = requests.post(url, headers=headers, json=payload, timeout=60)
print(response.json())
Example Responses
- 200 Success
- 502 Upstream Error
{
"ok": true,
"message": "Tool qdrant.qdrant-ingest-manifest executed successfully.",
"note": "Response shape varies by MCP tool. Inspect live responses for exact fields."
}
{
"ok": false,
"classification": "upstream_http_error",
"message": "Upstream MCP returned a non-success status."
}