tududi/backend/modules/mcp/tools/inboxTools.js

124 lines
3.6 KiB
JavaScript

'use strict';
const { Inbox } = require('../../../models');
/**
* Register all inbox-related MCP tools
*/
function registerInboxTools(server, context, tools) {
// 1. list_inbox - List inbox items
tools.push({
name: 'list_inbox',
description: 'List items from inbox with pagination',
inputSchema: {
type: 'object',
properties: {
limit: {
type: 'number',
description: 'Maximum number of items to return',
default: 20,
},
offset: {
type: 'number',
description: 'Number of items to skip',
default: 0,
},
},
},
handler: async (params) => {
const limit = params.limit || 20;
const offset = params.offset || 0;
const items = await Inbox.findAll({
where: { user_id: context.userId },
limit: limit,
offset: offset,
order: [['created_at', 'DESC']],
});
const serialized = items.map((item) => ({
id: item.id,
uid: item.uid,
content: item.content,
source: item.source,
processed: item.processed,
created_at: item.created_at,
updated_at: item.updated_at,
}));
return {
content: [
{
type: 'text',
text: JSON.stringify(
{
count: serialized.length,
items: serialized,
},
null,
2
),
},
],
};
},
});
// 2. add_to_inbox - Add item to inbox
tools.push({
name: 'add_to_inbox',
description: 'Add a new item to the inbox for quick capture',
inputSchema: {
type: 'object',
properties: {
content: {
type: 'string',
description: 'Inbox item content (required)',
},
source: {
type: 'string',
description: 'Source of the item (default: mcp)',
default: 'mcp',
},
},
required: ['content'],
},
handler: async (params) => {
const inboxData = {
user_id: context.userId,
content: params.content,
source: params.source || 'mcp',
processed: false,
};
const item = await Inbox.create(inboxData);
const serialized = {
id: item.id,
uid: item.uid,
content: item.content,
source: item.source,
processed: item.processed,
created_at: item.created_at,
};
return {
content: [
{
type: 'text',
text: JSON.stringify(
{
message: 'Item added to inbox successfully',
item: serialized,
},
null,
2
),
},
],
};
},
});
}
module.exports = { registerInboxTools };