Documentation Index
Fetch the complete documentation index at: https://docs.qoder.com/llms.txt
Use this file to discover all available pages before exploring further.
Deeplinks allow you to share Agentic Chat prompts, Quest tasks, rules, and MCP server configurations with others through simple URLs. When you click a deeplink, the IDE opens and displays a confirmation dialog showing the content to be added. Deeplinks never execute automatically until you review and confirm.
{scheme}://{host}/{path}?{parameters}
| Component | Description | Example |
|---|
scheme | Protocol | qoder |
host | Deeplink handler identifier | aicoding.aicoding-deeplink |
path | Action path | /chat, /quest, /rule, /mcp/add |
parameters | URL query parameters | text=hello&mode=agent |
Available Deeplink Types
| Path | Description | Login Required |
|---|
/chat | Create Chat | Yes |
/quest | Create Quest task | Yes |
/rule | Create rule | No |
/mcp/add | Add MCP server | No |
Create Chat /chat
Share prompts that can be directly used in chat. When clicking a chat deeplink, the IDE opens and pre-fills the chat input with the specified content.
qoder://aicoding.aicoding-deeplink/chat?text={prompt}&mode={mode}
Parameters
| Parameter | Required | Description |
|---|
text | Yes | The prompt content to pre-fill |
mode | No | Chat mode: agent or ask (default: user’s current mode) |
Example
qoder://aicoding.aicoding-deeplink/chat?text=Help%20me%20refactor%20this%20code&mode=agent
Generate Link Code
function generateChatDeeplink(text: string, mode?: 'agent' | 'ask'): string {
if (!text) {
throw new Error('Missing required parameter: text');
}
const url = new URL('qoder://aicoding.aicoding-deeplink/chat');
url.searchParams.set('text', text);
if (mode) {
url.searchParams.set('mode', mode);
}
return url.toString();
}
// Example
const deeplink = generateChatDeeplink('Help me refactor this code', 'agent');
console.log(deeplink);
// qoder://aicoding.aicoding-deeplink/chat?text=Help+me+refactor+this+code&mode=agent
from urllib.parse import urlencode
def generate_chat_deeplink(text: str, mode: str = None) -> str:
if not text:
raise ValueError('Missing required parameter: text')
params = {'text': text}
if mode:
params['mode'] = mode
return f"qoder://aicoding.aicoding-deeplink/chat?{urlencode(params)}"
# Example
deeplink = generate_chat_deeplink('Help me refactor this code', 'agent')
print(deeplink)
Create Quest Task /quest
Share Quest tasks that enable AI to autonomously complete complex development tasks. Quest Mode allows AI to plan, execute, and iterate on tasks with minimal human intervention.
qoder://aicoding.aicoding-deeplink/quest?text={description}&agentClass={agentClass}
Parameters
| Parameter | Required | Description |
|---|
text | Yes | Task description |
agentClass | No | Execution mode: LocalAgent (default), LocalWorktree, or RemoteAgent |
Execution Modes
| Mode | Description |
|---|
LocalAgent | Execute in current workspace |
LocalWorktree | Execute in isolated git worktree |
RemoteAgent | Execute on remote server |
Example
qoder://aicoding.aicoding-deeplink/quest?text=Implement%20user%20authentication%20with%20JWT&agentClass=LocalWorktree
Generate Link Code
type AgentClass = 'LocalAgent' | 'LocalWorktree' | 'RemoteAgent';
function generateQuestDeeplink(text: string, agentClass?: AgentClass): string {
if (!text) {
throw new Error('Missing required parameter: text');
}
const url = new URL('qoder://aicoding.aicoding-deeplink/quest');
url.searchParams.set('text', text);
if (agentClass) {
url.searchParams.set('agentClass', agentClass);
}
return url.toString();
}
// Example
const deeplink = generateQuestDeeplink('Implement user authentication with JWT', 'LocalWorktree');
console.log(deeplink);
from urllib.parse import urlencode
def generate_quest_deeplink(text: str, agent_class: str = None) -> str:
if not text:
raise ValueError('Missing required parameter: text')
params = {'text': text}
if agent_class:
params['agentClass'] = agent_class
return f"qoder://aicoding.aicoding-deeplink/quest?{urlencode(params)}"
# Example
deeplink = generate_quest_deeplink('Implement user authentication with JWT', 'LocalWorktree')
print(deeplink)
Create Rule /rule
Share rules to guide AI behavior. Rules can define coding standards, project conventions, or specific instructions for AI responses.
qoder://aicoding.aicoding-deeplink/rule?name={ruleName}&text={ruleContent}
Parameters
| Parameter | Required | Description |
|---|
name | Yes | Rule name (used as filename) |
text | Yes | Rule content |
Example
qoder://aicoding.aicoding-deeplink/rule?name=typescript-conventions&text=Always%20use%20strict%20TypeScript%20types
Generate Link Code
function generateRuleDeeplink(name: string, text: string): string {
if (!name || !text) {
throw new Error('Missing required parameters: name and text');
}
const url = new URL('qoder://aicoding.aicoding-deeplink/rule');
url.searchParams.set('name', name);
url.searchParams.set('text', text);
return url.toString();
}
// Example
const deeplink = generateRuleDeeplink(
'typescript-conventions',
`Always use strict TypeScript types.
Avoid using 'any' type.
Prefer interfaces over type aliases for object shapes.`
);
console.log(deeplink);
from urllib.parse import urlencode
def generate_rule_deeplink(name: str, text: str) -> str:
if not name or not text:
raise ValueError('Missing required parameters: name and text')
params = {'name': name, 'text': text}
return f"qoder://aicoding.aicoding-deeplink/rule?{urlencode(params)}"
# Example
deeplink = generate_rule_deeplink(
'typescript-conventions',
"""Always use strict TypeScript types.
Avoid using 'any' type.
Prefer interfaces over type aliases for object shapes."""
)
print(deeplink)
Add MCP Server /mcp/add
Share MCP (Model Context Protocol) server configurations. MCP servers extend AI capabilities by providing additional tools and context sources.
qoder://aicoding.aicoding-deeplink/mcp/add?name={serverName}&config={base64EncodedConfig}
Parameters
| Parameter | Required | Description |
|---|
name | Yes | MCP server name |
config | Yes | Base64 encoded MCP server JSON configuration |
Example
qoder://aicoding.aicoding-deeplink/mcp/add?name=postgres&config=JTdCJTIyY29tbWFuZCUyMiUzQSUyMm5weCUyMiUyQyUyMmFyZ3MlMjIlM0ElNUIlMjIteSUyMiUyQyUyMiU0MG1vZGVsY29udGV4dHByb3RvY29sJTJGc2VydmVyLXBvc3RncmVzJTIyJTJDJTIycG9zdGdyZXNxbCUzQSUyRiUyRmxvY2FsaG9zdCUyRm15ZGIlMjIlNUQlN0Q%3D
Generate Link Code
MCP server JSON configuration encoding Process:
- Create the configuration JSON object
- Serialize with
JSON.stringify()
- URL encode with
encodeURIComponent()
- Base64 encode with
btoa()
- URL encode the result with
encodeURIComponent()
interface McpServerConfig {
command?: string;
args?: string[];
url?: string;
env?: Record<string, string>;
}
function generateMcpAddDeeplink(name: string, config: McpServerConfig): string {
if (!name) {
throw new Error('Missing required parameter: name');
}
if (!config) {
throw new Error('Missing required parameter: config');
}
if (!config.command && !config.url) {
throw new Error('Config must contain either "command" or "url"');
}
const configJson = JSON.stringify(config);
const base64Config = btoa(encodeURIComponent(configJson));
const encodedName = encodeURIComponent(name);
const encodedConfig = encodeURIComponent(base64Config);
return `qoder://aicoding.aicoding-deeplink/mcp/add?name=${encodedName}&config=${encodedConfig}`;
}
// Example 1: PostgreSQL MCP Server
const postgresDeeplink = generateMcpAddDeeplink('postgres', {
command: 'npx',
args: ['-y', '@modelcontextprotocol/server-postgres', 'postgresql://localhost/mydb']
});
console.log(postgresDeeplink);
// Example 2: GitHub MCP Server with environment variables
const githubDeeplink = generateMcpAddDeeplink('github', {
command: 'npx',
args: ['-y', '@modelcontextprotocol/server-github'],
env: { GITHUB_PERSONAL_ACCESS_TOKEN: '<YOUR_TOKEN>' }
});
console.log(githubDeeplink);
// Example 3: HTTP-based MCP Server
const httpDeeplink = generateMcpAddDeeplink('custom-server', {
url: 'https://mcp.example.com/sse'
});
console.log(httpDeeplink);
import json
import base64
from urllib.parse import quote
def generate_mcp_add_deeplink(name: str, config: dict) -> str:
if not name:
raise ValueError('Missing required parameter: name')
if not config:
raise ValueError('Missing required parameter: config')
if 'command' not in config and 'url' not in config:
raise ValueError('Config must contain either "command" or "url"')
config_json = json.dumps(config)
config_encoded = quote(config_json)
config_base64 = base64.b64encode(config_encoded.encode()).decode()
encoded_name = quote(name)
encoded_config = quote(config_base64)
return f"qoder://aicoding.aicoding-deeplink/mcp/add?name={encoded_name}&config={encoded_config}"
# Example 1: PostgreSQL MCP Server
postgres_deeplink = generate_mcp_add_deeplink('postgres', {
'command': 'npx',
'args': ['-y', '@modelcontextprotocol/server-postgres', 'postgresql://localhost/mydb']
})
print(postgres_deeplink)
# Example 2: GitHub MCP Server with environment variables
github_deeplink = generate_mcp_add_deeplink('github', {
'command': 'npx',
'args': ['-y', '@modelcontextprotocol/server-github'],
'env': { 'GITHUB_PERSONAL_ACCESS_TOKEN': '<YOUR_TOKEN>' }
})
print(github_deeplink)
Security Considerations
Important: Always review deeplink content before sharing or clicking.
- Never include sensitive data: Do not embed API keys, passwords, or proprietary code in deeplinks
- Verify the source: Only click deeplinks from trusted sources
- Review before confirming: The IDE always shows a confirmation dialog - carefully review the content before proceeding
- No automatic execution: Deeplinks never execute automatically; user confirmation is always required
Troubleshooting
| Issue | Possible Cause | Solution |
|---|
| ”Unregistered deeplink path” | Unsupported deeplink path | Check if the path is supported and ensure Qoder version is 0.2.21 or above |
| ”Missing required parameter” | Parameter not provided | Check that all required parameters are included in the URL |
| ”Invalid JSON config” | Malformed JSON | Validate JSON structure before encoding |
| ”Quest Mode is disabled” | Quest feature not enabled | Enable Quest Mode in Settings |
| Login prompt appears | Deeplink requires authentication | Sign in to your account first |
| ”Invalid Base64 encoded config” | Incorrect MCP config encoding | Ensure correct encoding order: JSON → encodeURIComponent → btoa → encodeURIComponent |
URL Length Limits
Deeplink URLs should not exceed 8,000 characters. For longer content, consider:
- Shortening the prompt or rule content
- Using external references instead of inline content
- Splitting into multiple deeplinks