server.js•3.76 kB
const fs = require('fs');
const path = require('path');
const logFilePath = path.join(__dirname, '../cursor_launch.log');
const log = (message) => {
fs.appendFileSync(logFilePath, `[${new Date().toISOString()}] ${message}\n`);
};
log('--- Cursor Launch Log Start ---');
log(`Script starting in directory: ${process.cwd()}`);
log(`Initial PORT env var: ${process.env.PORT}`);
log(`Initial NOTION_API_KEY env var set: ${!!process.env.NOTION_API_KEY}, length: ${process.env.NOTION_API_KEY ? process.env.NOTION_API_KEY.length : 0}`);
require('dotenv').config();
log('dotenv configured.');
log(`PORT after dotenv: ${process.env.PORT}`);
log(`NOTION_API_KEY after dotenv set: ${!!process.env.NOTION_API_KEY}, length: ${process.env.NOTION_API_KEY ? process.env.NOTION_API_KEY.length : 0}`);
const express = require('express');
const cors = require('cors');
const bodyParser = require('body-parser');
// Import routes
const notionRoutes = require('./routes/notion');
const app = express();
const PORT = process.env.PORT || 8082;
// Middleware
app.use(cors());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
// Welcome route
app.get('/', (req, res) => {
res.json({
message: 'Welcome to the Notion MCP Server API',
status: 'running'
});
});
// Routes
app.use('/api/notion', notionRoutes);
// Define MCP capabilities
app.get('/mcp/manifest.json', (req, res) => {
res.json({
name: 'notion-mcp-server',
description: 'MCP Server for connecting to Notion',
version: '1.0.0',
functions: [
{
name: 'search_pages',
description: 'Search Notion pages by title or content',
parameters: {
type: 'object',
properties: {
query: {
type: 'string',
description: 'The search query'
}
},
required: ['query']
}
},
{
name: 'get_page',
description: 'Get a Notion page by ID',
parameters: {
type: 'object',
properties: {
page_id: {
type: 'string',
description: 'The Notion page ID'
}
},
required: ['page_id']
}
},
{
name: 'query_database',
description: 'Query a Notion database',
parameters: {
type: 'object',
properties: {
database_id: {
type: 'string',
description: 'The Notion database ID (defaults to env variable if not provided)'
},
filter: {
type: 'object',
description: 'Optional filter criteria'
},
sorts: {
type: 'array',
description: 'Optional sorting criteria'
}
},
required: []
}
},
{
name: 'create_page',
description: 'Create a new page in Notion',
parameters: {
type: 'object',
properties: {
parent: {
type: 'object',
description: 'Parent page or database'
},
properties: {
type: 'object',
description: 'Page properties'
},
children: {
type: 'array',
description: 'Page content blocks'
}
},
required: ['parent', 'properties']
}
}
]
});
});
// Error handling middleware
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).json({
error: 'Something went wrong!',
message: err.message
});
});
// Start server
app.listen(PORT, () => {
console.log(`Server running on port ${PORT}`);
});
module.exports = app;