Thanks to visit codestin.com
Credit goes to docs.qoder.com

Skip to main content
Deeplinks allow you to share AI 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. deeplink example

URL Format

{scheme}://{host}/{path}?{parameters}
ComponentDescriptionExample
schemeProtocolqoder
hostDeeplink handler identifieraicoding.aicoding-deeplink
pathAction path/chat, /quest, /rule, /mcp/add
parametersURL query parameterstext=hello&mode=agent
PathDescriptionLogin Required
/chatCreate AI ChatYes
/questCreate Quest taskYes
/ruleCreate ruleNo
/mcp/addAdd MCP serverNo

Create AI 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.

URL Format

qoder://aicoding.aicoding-deeplink/chat?text={prompt}&mode={mode}

Parameters

ParameterRequiredDescription
textYesThe prompt content to pre-fill
modeNoChat mode: agent or ask (default: user’s current mode)

Example

qoder://aicoding.aicoding-deeplink/chat?text=Help%20me%20refactor%20this%20code&mode=agent
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

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.

URL Format

qoder://aicoding.aicoding-deeplink/quest?text={description}&agentClass={agentClass}

Parameters

ParameterRequiredDescription
textYesTask description
agentClassNoExecution mode: LocalAgent (default), LocalWorktree, or RemoteAgent

Execution Modes

ModeDescription
LocalAgentExecute in current workspace
LocalWorktreeExecute in isolated git worktree
RemoteAgentExecute on remote server

Example

qoder://aicoding.aicoding-deeplink/quest?text=Implement%20user%20authentication%20with%20JWT&agentClass=LocalWorktree
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);

Create Rule /rule

Share rules to guide AI behavior. Rules can define coding standards, project conventions, or specific instructions for AI responses.

URL Format

qoder://aicoding.aicoding-deeplink/rule?name={ruleName}&text={ruleContent}

Parameters

ParameterRequiredDescription
nameYesRule name (used as filename)
textYesRule content

Example

qoder://aicoding.aicoding-deeplink/rule?name=typescript-conventions&text=Always%20use%20strict%20TypeScript%20types
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);

Add MCP Server /mcp/add

Share MCP (Model Context Protocol) server configurations. MCP servers extend AI capabilities by providing additional tools and context sources.

URL Format

qoder://aicoding.aicoding-deeplink/mcp/add?name={serverName}&config={base64EncodedConfig}

Parameters

ParameterRequiredDescription
nameYesMCP server name
configYesBase64 encoded MCP server JSON configuration

Example

qoder://aicoding.aicoding-deeplink/mcp/add?name=postgres&config=JTdCJTIyY29tbWFuZCUyMiUzQSUyMm5weCUyMiUyQyUyMmFyZ3MlMjIlM0ElNUIlMjIteSUyMiUyQyUyMiU0MG1vZGVsY29udGV4dHByb3RvY29sJTJGc2VydmVyLXBvc3RncmVzJTIyJTJDJTIycG9zdGdyZXNxbCUzQSUyRiUyRmxvY2FsaG9zdCUyRm15ZGIlMjIlNUQlN0Q%3D
MCP server JSON configuration encoding Process:
  1. Create the configuration JSON object
  2. Serialize with JSON.stringify()
  3. URL encode with encodeURIComponent()
  4. Base64 encode with btoa()
  5. 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);

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

IssuePossible CauseSolution
”Unregistered deeplink path”Unsupported deeplink pathCheck if the path is supported and ensure Qoder version is 0.2.21 or above
”Missing required parameter”Parameter not providedCheck that all required parameters are included in the URL
”Invalid JSON config”Malformed JSONValidate JSON structure before encoding
”Quest mode is disabled”Quest feature not enabledEnable Quest mode in Settings
Login prompt appearsDeeplink requires authenticationSign in to your account first
”Invalid Base64 encoded config”Incorrect MCP config encodingEnsure 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