@qikdev/mcp 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,152 @@
1
+ import { promises as fs } from 'fs';
2
+ import { join } from 'path';
3
+ import { homedir } from 'os';
4
+ import axios from 'axios';
5
+ export class ConfigManager {
6
+ configDir;
7
+ configFile;
8
+ mcpConfigFile;
9
+ constructor() {
10
+ this.configDir = join(homedir(), '.qik-mcp');
11
+ this.configFile = join(this.configDir, 'config.json');
12
+ this.mcpConfigFile = join(homedir(), 'Library', 'Application Support', 'Code', 'User', 'globalStorage', 'saoudrizwan.claude-dev', 'settings', 'cline_mcp_settings.json');
13
+ }
14
+ async ensureConfigDir() {
15
+ try {
16
+ await fs.access(this.configDir);
17
+ }
18
+ catch {
19
+ await fs.mkdir(this.configDir, { recursive: true });
20
+ }
21
+ }
22
+ async saveConfig(config) {
23
+ await this.ensureConfigDir();
24
+ await fs.writeFile(this.configFile, JSON.stringify(config, null, 2));
25
+ }
26
+ async loadConfig() {
27
+ try {
28
+ const data = await fs.readFile(this.configFile, 'utf-8');
29
+ return JSON.parse(data);
30
+ }
31
+ catch {
32
+ return null;
33
+ }
34
+ }
35
+ async validateToken(token, apiUrl = 'https://api.qik.dev') {
36
+ try {
37
+ const response = await axios.get(`${apiUrl}/user`, {
38
+ headers: {
39
+ 'Authorization': `Bearer ${token}`,
40
+ 'Content-Type': 'application/json',
41
+ },
42
+ timeout: 10000,
43
+ });
44
+ return {
45
+ valid: true,
46
+ session: response.data,
47
+ };
48
+ }
49
+ catch (error) {
50
+ if (axios.isAxiosError(error)) {
51
+ if (error.response?.status === 401) {
52
+ return { valid: false, error: 'Invalid access token' };
53
+ }
54
+ else if (error.response?.status === 403) {
55
+ return { valid: false, error: 'Access denied - token may not have required permissions' };
56
+ }
57
+ else if (error.code === 'ENOTFOUND' || error.code === 'ECONNREFUSED') {
58
+ return { valid: false, error: 'Cannot connect to Qik API - check your internet connection' };
59
+ }
60
+ }
61
+ return { valid: false, error: error.message || 'Unknown error occurred' };
62
+ }
63
+ }
64
+ async addToMcpConfig(serverName = 'qik') {
65
+ try {
66
+ // Check if MCP config file exists
67
+ let mcpConfig = {};
68
+ try {
69
+ const data = await fs.readFile(this.mcpConfigFile, 'utf-8');
70
+ mcpConfig = JSON.parse(data);
71
+ }
72
+ catch {
73
+ // File doesn't exist, start with empty config
74
+ mcpConfig = { mcpServers: {} };
75
+ }
76
+ // Ensure mcpServers object exists
77
+ if (!mcpConfig.mcpServers) {
78
+ mcpConfig.mcpServers = {};
79
+ }
80
+ // Add or update the Qik server configuration
81
+ mcpConfig.mcpServers[serverName] = {
82
+ command: 'npx',
83
+ args: ['qik-mcp-server', 'run'],
84
+ };
85
+ // Ensure the directory exists
86
+ await fs.mkdir(join(this.mcpConfigFile, '..'), { recursive: true });
87
+ // Write the updated config
88
+ await fs.writeFile(this.mcpConfigFile, JSON.stringify(mcpConfig, null, 2));
89
+ return { success: true };
90
+ }
91
+ catch (error) {
92
+ return {
93
+ success: false,
94
+ error: `Failed to update MCP configuration: ${error.message}`
95
+ };
96
+ }
97
+ }
98
+ async removeFromMcpConfig(serverName = 'qik') {
99
+ try {
100
+ const data = await fs.readFile(this.mcpConfigFile, 'utf-8');
101
+ const mcpConfig = JSON.parse(data);
102
+ if (mcpConfig.mcpServers && mcpConfig.mcpServers[serverName]) {
103
+ delete mcpConfig.mcpServers[serverName];
104
+ await fs.writeFile(this.mcpConfigFile, JSON.stringify(mcpConfig, null, 2));
105
+ }
106
+ return { success: true };
107
+ }
108
+ catch (error) {
109
+ return {
110
+ success: false,
111
+ error: `Failed to remove from MCP configuration: ${error.message}`
112
+ };
113
+ }
114
+ }
115
+ async isConfigured() {
116
+ const config = await this.loadConfig();
117
+ return config !== null && !!config.accessToken;
118
+ }
119
+ async getStatus() {
120
+ try {
121
+ const config = await this.loadConfig();
122
+ if (!config) {
123
+ return { configured: false };
124
+ }
125
+ const validation = await this.validateToken(config.accessToken, config.apiUrl);
126
+ // Check if MCP is configured
127
+ let mcpConfigured = false;
128
+ try {
129
+ const mcpData = await fs.readFile(this.mcpConfigFile, 'utf-8');
130
+ const mcpConfig = JSON.parse(mcpData);
131
+ mcpConfigured = !!(mcpConfig.mcpServers && mcpConfig.mcpServers[config.serverName || 'qik']);
132
+ }
133
+ catch {
134
+ mcpConfigured = false;
135
+ }
136
+ return {
137
+ configured: true,
138
+ config,
139
+ tokenValid: validation.valid,
140
+ mcpConfigured,
141
+ ...(validation.error && { error: validation.error }),
142
+ };
143
+ }
144
+ catch (error) {
145
+ return {
146
+ configured: false,
147
+ error: error.message,
148
+ };
149
+ }
150
+ }
151
+ }
152
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Qik Platform MCP Server
4
+ *
5
+ * This MCP server provides comprehensive integration with the Qik platform,
6
+ * enabling AI assistants to interact with Qik's content management system,
7
+ * user management, forms, files, and more.
8
+ *
9
+ * Features:
10
+ * - Content management (CRUD operations)
11
+ * - Content type discovery via glossary
12
+ * - User and profile management
13
+ * - Form handling and submissions
14
+ * - File upload and management
15
+ * - Search and filtering capabilities
16
+ * - Scope and permission management
17
+ */
18
+ export declare class QikMCPServer {
19
+ private server;
20
+ private axiosInstance;
21
+ private glossary;
22
+ constructor();
23
+ private initializeGlossary;
24
+ private formatError;
25
+ private setupToolHandlers;
26
+ private getUserSession;
27
+ private getGlossary;
28
+ private getContentDefinition;
29
+ private getContent;
30
+ private listContent;
31
+ private createContent;
32
+ private updateContent;
33
+ private deleteContent;
34
+ private listProfiles;
35
+ private createProfile;
36
+ private getForm;
37
+ private submitForm;
38
+ private uploadFile;
39
+ private searchContent;
40
+ private getScopes;
41
+ private getSmartlist;
42
+ run(): Promise<void>;
43
+ }
44
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;GAeG;AAwFH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,QAAQ,CAAyC;;YAwC3C,kBAAkB;IAUhC,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,iBAAiB;YAmcX,cAAc;YAUd,WAAW;YAaX,oBAAoB;YAUpB,UAAU;YAkBV,WAAW;YAiBX,aAAa;YAgBb,aAAa;YAWb,aAAa;YAUb,YAAY;YAeZ,aAAa;YAmBb,OAAO;YAUP,UAAU;YAUV,UAAU;YA4BV,aAAa;YAgCb,SAAS;YAUT,YAAY;IAUpB,GAAG;CAKV"}