@backendkit-labs/mcp-connectors 0.1.1 → 0.1.2
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.
- package/README.md +2 -0
- package/dist/odoo/server.d.ts +3 -0
- package/dist/odoo/server.d.ts.map +1 -0
- package/dist/odoo/server.js +152 -0
- package/dist/odoo/server.js.map +1 -0
- package/package.json +4 -3
package/README.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# @backendkit-labs/mcp-connectors
|
|
2
2
|
|
|
3
|
+
> **Status: `stable`** — Maintained and production-ready. No new features during the pilot phase.
|
|
4
|
+
|
|
3
5
|
Three production-ready MCP (Model Context Protocol) servers that expose enterprise SaaS integrations as agent tools: **HubSpot CRM**, **Jira**, and **Google Calendar**.
|
|
4
6
|
|
|
5
7
|
Each connector ships as a standalone binary that runs in stdio mode (for use with any MCP client) or HTTP mode (for multi-tenant server deployments).
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/odoo/server.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
|
|
5
|
+
const zod_1 = require("zod");
|
|
6
|
+
const server_runner_js_1 = require("../shared/server-runner.js");
|
|
7
|
+
let _session = null;
|
|
8
|
+
function cfg() {
|
|
9
|
+
const url = process.env.ODOO_URL?.replace(/\/$/, '');
|
|
10
|
+
const db = process.env.ODOO_DB;
|
|
11
|
+
const user = process.env.ODOO_USER;
|
|
12
|
+
const pass = process.env.ODOO_PASSWORD;
|
|
13
|
+
if (!url || !db || !user || !pass) {
|
|
14
|
+
throw new Error('Set ODOO_URL, ODOO_DB, ODOO_USER, ODOO_PASSWORD');
|
|
15
|
+
}
|
|
16
|
+
return { url, db, user, pass };
|
|
17
|
+
}
|
|
18
|
+
async function authenticate() {
|
|
19
|
+
if (_session)
|
|
20
|
+
return _session;
|
|
21
|
+
const { url, db, user, pass } = cfg();
|
|
22
|
+
const res = await fetch(`${url}/web/session/authenticate`, {
|
|
23
|
+
method: 'POST',
|
|
24
|
+
headers: { 'Content-Type': 'application/json' },
|
|
25
|
+
body: JSON.stringify({
|
|
26
|
+
jsonrpc: '2.0', method: 'call', id: 1,
|
|
27
|
+
params: { db, login: user, password: pass },
|
|
28
|
+
}),
|
|
29
|
+
});
|
|
30
|
+
if (!res.ok)
|
|
31
|
+
throw new Error(`Odoo auth HTTP ${res.status}`);
|
|
32
|
+
const data = await res.json();
|
|
33
|
+
if (data.error)
|
|
34
|
+
throw new Error(`Odoo auth error: ${data.error.message}`);
|
|
35
|
+
if (!data.result?.uid)
|
|
36
|
+
throw new Error('Odoo auth failed — no uid returned (wrong credentials?)');
|
|
37
|
+
_session = { uid: data.result.uid, sessionId: data.result.session_id };
|
|
38
|
+
return _session;
|
|
39
|
+
}
|
|
40
|
+
async function odooCall(model, method, args, kwargs = {}) {
|
|
41
|
+
const sess = await authenticate();
|
|
42
|
+
const { url } = cfg();
|
|
43
|
+
const res = await fetch(`${url}/web/dataset/call_kw`, {
|
|
44
|
+
method: 'POST',
|
|
45
|
+
headers: {
|
|
46
|
+
'Content-Type': 'application/json',
|
|
47
|
+
'Cookie': `session_id=${sess.sessionId}`,
|
|
48
|
+
},
|
|
49
|
+
body: JSON.stringify({
|
|
50
|
+
jsonrpc: '2.0', method: 'call', id: Date.now(),
|
|
51
|
+
params: { model, method, args, kwargs },
|
|
52
|
+
}),
|
|
53
|
+
});
|
|
54
|
+
if (!res.ok)
|
|
55
|
+
throw new Error(`Odoo ${model}.${method} HTTP ${res.status}`);
|
|
56
|
+
const data = await res.json();
|
|
57
|
+
if (data.error) {
|
|
58
|
+
throw new Error(`Odoo ${model}.${method}: ${data.error.data?.message ?? data.error.message}`);
|
|
59
|
+
}
|
|
60
|
+
return data.result;
|
|
61
|
+
}
|
|
62
|
+
// ── Tools ─────────────────────────────────────────────────────────────────────
|
|
63
|
+
function buildServer() {
|
|
64
|
+
const srv = new mcp_js_1.McpServer({ name: 'bk-mcp-odoo', version: '0.1.0' });
|
|
65
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
66
|
+
const t = srv.tool.bind(srv);
|
|
67
|
+
t('odoo_employee_create', 'Create a new employee record in Odoo HR.', {
|
|
68
|
+
name: zod_1.z.string().describe('Full name'),
|
|
69
|
+
work_email: zod_1.z.string().email().optional().describe('Work email address'),
|
|
70
|
+
job_title: zod_1.z.string().optional().describe('Job title'),
|
|
71
|
+
department: zod_1.z.string().optional().describe('Department name (partial match)'),
|
|
72
|
+
}, async ({ name, work_email, job_title, department }) => {
|
|
73
|
+
const vals = { name };
|
|
74
|
+
if (work_email)
|
|
75
|
+
vals.work_email = work_email;
|
|
76
|
+
if (job_title)
|
|
77
|
+
vals.job_title = job_title;
|
|
78
|
+
if (department) {
|
|
79
|
+
const ids = await odooCall('hr.department', 'search', [[['name', 'ilike', department]]]);
|
|
80
|
+
if (ids.length)
|
|
81
|
+
vals.department_id = ids[0];
|
|
82
|
+
}
|
|
83
|
+
const id = await odooCall('hr.employee', 'create', [vals]);
|
|
84
|
+
return { content: [{ type: 'text', text: `Employee created. Odoo ID: ${id}` }] };
|
|
85
|
+
});
|
|
86
|
+
t('odoo_employee_get', 'Retrieve employee records from Odoo by ID or name search.', {
|
|
87
|
+
employee_id: zod_1.z.number().optional().describe('Exact employee ID'),
|
|
88
|
+
name: zod_1.z.string().optional().describe('Name filter (partial match)'),
|
|
89
|
+
limit: zod_1.z.number().optional().describe('Maximum records to return (default 5)'),
|
|
90
|
+
}, async ({ employee_id, name, limit }) => {
|
|
91
|
+
let domain;
|
|
92
|
+
if (employee_id !== undefined) {
|
|
93
|
+
domain = [['id', '=', employee_id]];
|
|
94
|
+
}
|
|
95
|
+
else if (name) {
|
|
96
|
+
domain = [['name', 'ilike', name]];
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
domain = [['active', '=', true]];
|
|
100
|
+
}
|
|
101
|
+
const records = await odooCall('hr.employee', 'search_read', [], {
|
|
102
|
+
domain,
|
|
103
|
+
fields: ['id', 'name', 'work_email', 'job_title', 'department_id', 'active'],
|
|
104
|
+
limit: limit ?? 5,
|
|
105
|
+
});
|
|
106
|
+
if (!records.length) {
|
|
107
|
+
return { content: [{ type: 'text', text: 'No employees found.' }] };
|
|
108
|
+
}
|
|
109
|
+
const lines = records.map(r => {
|
|
110
|
+
const dept = r.department_id;
|
|
111
|
+
return [
|
|
112
|
+
`ID: ${r.id}`,
|
|
113
|
+
`Name: ${r.name}`,
|
|
114
|
+
`Title: ${r.job_title ?? '—'}`,
|
|
115
|
+
`Dept: ${dept ? dept[1] : '—'}`,
|
|
116
|
+
`Email: ${r.work_email ?? '—'}`,
|
|
117
|
+
].join(' | ');
|
|
118
|
+
});
|
|
119
|
+
return { content: [{ type: 'text', text: lines.join('\n') }] };
|
|
120
|
+
});
|
|
121
|
+
t('payroll_prepare', 'Create a draft payroll slip (hr.payslip) for an employee and period.', {
|
|
122
|
+
employee_id: zod_1.z.number().describe('Odoo employee ID'),
|
|
123
|
+
date_from: zod_1.z.string().describe('Period start date (YYYY-MM-DD)'),
|
|
124
|
+
date_to: zod_1.z.string().describe('Period end date (YYYY-MM-DD)'),
|
|
125
|
+
}, async ({ employee_id, date_from, date_to }) => {
|
|
126
|
+
const payslipId = await odooCall('hr.payslip', 'create', [{
|
|
127
|
+
employee_id,
|
|
128
|
+
date_from,
|
|
129
|
+
date_to,
|
|
130
|
+
}]);
|
|
131
|
+
return {
|
|
132
|
+
content: [{ type: 'text', text: `Payslip created. ID: ${payslipId} State: draft` }],
|
|
133
|
+
};
|
|
134
|
+
});
|
|
135
|
+
t('payroll_confirm', 'Compute salary lines and confirm (validate) a payroll slip.', {
|
|
136
|
+
payslip_id: zod_1.z.number().describe('Payslip ID returned by payroll_prepare'),
|
|
137
|
+
}, async ({ payslip_id }) => {
|
|
138
|
+
await odooCall('hr.payslip', 'compute_sheet', [[payslip_id]]);
|
|
139
|
+
await odooCall('hr.payslip', 'action_payslip_done', [[payslip_id]]);
|
|
140
|
+
return {
|
|
141
|
+
content: [{ type: 'text', text: `Payslip ${payslip_id} confirmed. State: done` }],
|
|
142
|
+
};
|
|
143
|
+
});
|
|
144
|
+
return srv;
|
|
145
|
+
}
|
|
146
|
+
// ── Start ─────────────────────────────────────────────────────────────────────
|
|
147
|
+
const { httpMode, port } = (0, server_runner_js_1.parseCliArgs)();
|
|
148
|
+
(0, server_runner_js_1.runMcpServer)(buildServer, { httpMode, port, label: 'bk-mcp-odoo' }).catch(err => {
|
|
149
|
+
process.stderr.write(`[bk-mcp-odoo] Fatal: ${err.message}\n`);
|
|
150
|
+
process.exit(1);
|
|
151
|
+
});
|
|
152
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/odoo/server.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@backendkit-labs/mcp-connectors",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "Enterprise MCP connectors — HubSpot CRM, Jira, Google Calendar",
|
|
3
|
+
"version": "0.1.2",
|
|
4
|
+
"description": "Enterprise MCP connectors — HubSpot CRM, Jira, Google Calendar, Odoo ERP",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"bin": {
|
|
8
8
|
"bk-mcp-hubspot": "./dist/hubspot/server.js",
|
|
9
9
|
"bk-mcp-jira": "./dist/jira/server.js",
|
|
10
|
-
"bk-mcp-gcal": "./dist/gcal/server.js"
|
|
10
|
+
"bk-mcp-gcal": "./dist/gcal/server.js",
|
|
11
|
+
"bk-mcp-odoo": "./dist/odoo/server.js"
|
|
11
12
|
},
|
|
12
13
|
"files": ["dist/", "README.md"],
|
|
13
14
|
"repository": {
|