Visit Cortex on https://cortex.lyzr.app
Open Settings → Developer Settings
| Field | What to Enter |
|---|---|
| Display Name | Your tool name (e.g., Meeting Intelligence) |
| Tool ID | Auto-generated (e.g., meeting-intelligence) |
| Description | What your tool does |
Check the boxes:
- ✅ Push Documents - Send data to Cortex
- ✅ Query - Search the knowledge graph
- ✅ Get Context - Get user info
Pick what your tool will send:
meeting_transcriptvoice_notedocumentnote
You'll see a popup with:
- Your API Key (masked)
- Download buttons
Click both buttons:
- cortex.yaml - Your config file
- .env.cortex - Your API key
⚠️ Important: Save these files! You won't see the API key again.
my-tool/
├── cortex.yaml ← Put downloaded file here
├── .env ← Rename .env.cortex to .env
└── app.py ← Your code
name: meeting-intelligence
display_name: Meeting Intelligence
description: AI-powered meeting transcription
version: 1.0.0
documents:
- meeting_transcript
- voice_noteCORTEX_ENABLED=true
CORTEX_API_URL=http://localhost:5000/api/tools
CORTEX_API_KEY=ctx_meeting-intelligence_abc123xyz...
CORTEX_TOOL_ID=meeting-intelligencepip install requests python-dotenvimport os
import requests
from dotenv import load_dotenv
# Load your .env file
load_dotenv()
# Your credentials
API_URL = os.getenv("CORTEX_API_URL")
API_KEY = os.getenv("CORTEX_API_KEY")
TOOL_ID = os.getenv("CORTEX_TOOL_ID")
# Headers for all requests
headers = {
"X-Cortex-Tool-ID": TOOL_ID,
"X-API-Key": API_KEY,
"Content-Type": "application/json"
}# Send a meeting transcript to Cortex
data = {
"external_id": "meeting_001",
"document_type": "meeting_transcript",
"content": "John: Let's discuss the roadmap. Sarah: I think we should...",
"name": "Team Standup",
"access_scope": "global"
}
response = requests.post(
f"{API_URL}/documents",
headers=headers,
json=data
)
print(response.json())Output:
{
"id": "abc-123-def",
"status": "indexed",
"external_id": "meeting_001"
}# Ask a question
data = {
"query": "What did we discuss in the standup?",
"max_results": 5
}
response = requests.post(
f"{API_URL}/query",
headers=headers,
json=data
)
print(response.json())Output:
{
"answer": "In the standup, John discussed the roadmap and Sarah shared her thoughts...",
"sources": [
{
"name": "Team Standup",
"type": "meeting_transcript"
}
]
}# Get user's teams and permissions
email = "john@company.com"
response = requests.get(
f"{API_URL}/context/{email}",
headers=headers
)
print(response.json())Output:
{
"id": "user-123",
"email": "john@company.com",
"name": "John Doe",
"teams": [{"id": "team-1", "name": "Engineering"}],
"role": "member"
}npm install axios dotenvimport axios from 'axios';
import dotenv from 'dotenv';
dotenv.config();
const client = axios.create({
baseURL: process.env.CORTEX_API_URL,
headers: {
'X-Cortex-Tool-ID': process.env.CORTEX_TOOL_ID,
'X-API-Key': process.env.CORTEX_API_KEY,
},
});const response = await client.post('/documents', {
external_id: 'meeting_001',
document_type: 'meeting_transcript',
content: 'Meeting transcript content...',
name: 'Team Standup',
access_scope: 'global',
});
console.log(response.data);
// { id: "abc-123", status: "indexed", external_id: "meeting_001" }const response = await client.post('/query', {
query: 'What were the action items?',
max_results: 5,
});
console.log(response.data.answer);
// "The action items were..."The CLI helps you create new tool projects quickly.
cd sdk/cli
npm install
npm run build
npm linkmkdir my-new-tool
cd my-new-tool
cortex initOutput:
Cortex Tool Initializer
? Tool name (lowercase, hyphens only): my-new-tool
? Display name: My New Tool
? Description: A tool that does amazing things
? Document types (comma-separated): meeting_transcript,voice_note
✔ Created cortex.yaml
Created backend/
Created frontend/
Created .env.example
Tool initialized successfully!
Next steps:
1. Edit cortex.yaml with your tool configuration
2. Implement your backend and frontend
3. Run `cortex validate` to check your manifest
4. Run `cortex dev` to start local development
cortex validateOutput:
Validating cortex.yaml...
✓ Manifest is valid!
Summary:
Name: my-new-tool
Display Name: My New Tool
Version: 1.0.0
Documents: meeting_transcript, voice_note
Backend Port: 8000
Frontend Port: 3000
my-new-tool/
├── cortex.yaml
├── .env.example
├── backend/
└── frontend/
cortex.yaml:
name: my-new-tool
display_name: My New Tool
description: A tool that does amazing things
version: 1.0.0
documents:
- meeting_transcript
- voice_note
ui:
embed_path: /
menu:
label: My New Tool
position: tools
build:
backend:
dockerfile: backend/Dockerfile
port: 8000
health_check: /health
frontend:
dockerfile: frontend/Dockerfile
port: 3000
secrets: []| What | Method | URL |
|---|---|---|
| Push document | POST | /api/tools/documents |
| Search | POST | /api/tools/query |
| Get user | GET | /api/tools/context/{email} |
X-Cortex-Tool-ID: your-tool-id
X-API-Key: ctx_your-tool-id_xxxxx
Content-Type: application/json
meeting_transcript- Meeting notesvoice_note- Voice memosdocument- General docsnote- Text notesemail- Emailstask- Tasks