SkillDiscs exposes a production Model Context Protocol (MCP) server for read-only access to your API-visible Disks.
Use MCP when your agent client already supports remote tools. Use the REST API when you are building your own app, backend job, workflow, or integration.
Endpoint
https://skilldiscs.com/api/mcp
The endpoint uses Streamable HTTP transport. In MCP client configuration, use type: "http" or transport: "http" depending on the client.
Authentication
Send your SkillDiscs API key as a bearer token:
Authorization: Bearer sk_your_key_here
Generate keys in Settings -> API Keys.
Treat MCP API keys like passwords. Anyone holding the key can query API-visible data from your SkillDiscs library.
Quick Setup
Claude Code
Claude Code can connect directly to remote HTTP MCP servers.
claude mcp add --transport http skilldiscs https://skilldiscs.com/api/mcp \
--header "Authorization: Bearer sk_your_key_here"
Then verify the connection inside Claude Code:
JSON MCP Config
Use this shape for clients that read .mcp.json, ~/.claude.json, or a similar MCP config file:
{
"mcpServers": {
"skilldiscs": {
"type": "http",
"url": "https://skilldiscs.com/api/mcp",
"headers": {
"Authorization": "Bearer ${SKILLDISCS_API_KEY}"
}
}
}
}
Store the key in your environment instead of committing it:
export SKILLDISCS_API_KEY="sk_your_key_here"
Claude Agent SDK
When using an SDK that accepts MCP servers programmatically, pass the same HTTP endpoint and authorization header:
const mcpServers = {
skilldiscs: {
type: "http",
url: "https://skilldiscs.com/api/mcp",
headers: {
Authorization: `Bearer ${process.env.SKILLDISCS_API_KEY}`,
},
},
}
If your client asks for allowed tool names, SkillDiscs tools follow the standard MCP naming pattern:
mcp__skilldiscs__search_knowledge
mcp__skilldiscs__get_disk
mcp__skilldiscs__list_disks
| Tool | Purpose |
|---|
search_knowledge | Semantic search across your owned Disk sections |
get_disk | Read one Disk by UUID or public_id |
list_disks | List owned and active-saved Disks |
All tools return MCP text content whose text value is formatted JSON.
search_knowledge
Semantic search over owned Disk sections.
| Field | Type | Required | Notes |
|---|
query | string | Yes | Search query. The server embeds the first 1,000 characters. |
limit | integer | No | Defaults to 5. Maximum 25. |
{
"query": "how does spaced repetition work?",
"limit": 5
}
Output
The tool returns a JSON array of search hits.
[
{
"disk_public_id": "abc123",
"disk_title": "Memory Systems",
"section_index": 3,
"similarity": 0.91,
"key_points": ["Reviews should happen before forgetting"],
"redacted": false,
"section_text": "..."
}
]
For redacted hits, use snippet instead of section_text:
[
{
"disk_public_id": "def456",
"disk_title": "Public Learning Notes",
"section_index": 2,
"similarity": 0.84,
"key_points": ["Retrieval strengthens memory"],
"redacted": true,
"snippet": "..."
}
]
Search is currently scoped to owned Disks. Saved Disks can be listed with list_disks and read with get_disk, but semantic search results come from the authenticated user’s own indexed sections.
get_disk
Read one Disk by UUID or public_id.
| Field | Type | Required | Notes |
|---|
disk_id | string | Yes | Disk UUID or public ID. |
Output
The tool returns one Disk object.
{
"public_id": "abc123",
"title": "Memory Systems",
"summary": "...",
"category": "Learning",
"word_count": 1240,
"visibility": "private",
"relationship": "owned",
"source_url": "https://example.com/source",
"ai_generated": true,
"redacted": false,
"tags": ["learning", "memory"],
"sections": [
{
"index": 1,
"word_count": 180,
"key_points": ["..."],
"text": "..."
}
],
"related_disks": [
{
"public_id": "rel789",
"title": "Forgetting Curves",
"similarity": 0.76
}
],
"text": "...",
"created_at": "2026-06-06T12:00:00.000Z"
}
Full text and sections[].text are conditional:
| Access | redacted | Source text fields |
|---|
| Owner viewing own private Disk | false | text and sections[].text can be present |
| Owner viewing own published Disk | true | Full source text is omitted |
| Active saved Disk from another owner | true | Full source text is omitted |
If the Disk is not accessible to the API key, the tool returns JSON text like:
{
"error": "not_found",
"message": "Disk not found"
}
list_disks
List Disks available to the authenticated API key.
| Field | Type | Required | Notes |
|---|
scope | string | No | all, owned, saved, private, or published. Defaults to all. |
category | string | No | Exact category name. |
tag | string | No | Exact tag name. |
limit | integer | No | Defaults to 20. Maximum 100. |
{
"scope": "all",
"limit": 20
}
Output
The tool returns a list response:
{
"scope": "all",
"total": 1,
"disks": [
{
"public_id": "abc123",
"title": "Memory Systems",
"summary": "...",
"category": "Learning",
"visibility": "private",
"relationship": "owned",
"owner_user_id": "8fb1d0c2-08d1-46ef-a2f3-6bf241745e24",
"owner_display_name": "SkillDiscs User",
"word_count": 1240,
"tags": ["learning"],
"saved_at": null,
"created_at": "2026-06-06T12:00:00.000Z"
}
]
}
Scope behavior:
| Scope | Includes |
|---|
all | Owned Disks plus active saved Disks |
owned | Disks created by the authenticated user |
saved | Active saved Disks from other owners |
private | Owned unpublished Disks |
published | Owned published Disks |
Redaction
MCP uses the same redaction policy as the REST API:
- Owner-private Disk access can include full source text.
- Owner-published and saved Disk access returns redacted, AI-derived fields.
- Search hits include either
section_text or snippet.
Always check redacted before assuming verbatim source text is present.
Errors
Authentication and rate-limit errors are returned by the HTTP endpoint before MCP tool execution.
| HTTP status | Error | Meaning |
|---|
401 | unauthorized | Missing or invalid API key |
429 | rate_limit_exceeded | Request limit exceeded |
500 | internal_error | Server error or upstream lookup failure |
Best Practices
- Prefer
search_knowledge when the agent has a question and does not know the relevant Disk.
- Use
list_disks before get_disk when the agent needs to choose from the user’s library.
- Use
get_disk when the agent already has a Disk UUID or public ID.
- Treat all returned content as user-scoped and private to the API key holder.
- Check
redacted and prefer section_text ?? snippet in agent prompts.