NewCrm MCP Server Foundation
by JTSTBP
README.md
# NewCrm MCP Server Foundation
This project is a separate MCP server for the existing NewCrm CRM. It does not modify the CRM codebase and does not connect directly to MongoDB.
Current scope is intentionally limited to a clean foundation for future MCP integration.
## Architecture
ChatGPT Work
↓
OAuth 2.1
↓
NewCrm MCP Server
↓
Existing NewCrm Backend APIs
↓
MongoDB
The MCP server is designed to communicate with the existing CRM through the existing backend API layer wherever possible.
## Current status
The project intentionally does not include:
- OAuth implementation
- MCP tools
- HubSpot integration
- write operations
- create, update, or delete operations
- MongoDB access
- bulk exports
- webhooks
- batch updates
## Project structure
```text
NewCrm-MCP/
├── src/
│ ├── audit/
│ │ └── logger.js
│ ├── auth/
│ │ └── tokenValidator.js
│ ├── config/
│ │ └── env.js
│ ├── permissions/
│ │ └── roleDefinitions.js
│ ├── services/
│ │ └── crmApiClient.js
│ ├── tools/
│ │ └── index.js
│ └── server.js
├── .env.example
├── .gitignore
├── package.json
├── README.md
└── node_modules/
```
## Installation
1. Open a terminal in the project folder.
2. Install dependencies:
```bash
npm install
```
## Environment variables
Copy the example file and set values in your local `.env` file:
```bash
copy .env.example .env
```
The `.env` file should contain values such as:
- `PORT`
- `HOST`
- `NODE_ENV`
- `CRM_API_BASE_URL=https://www.jtcrm.in/api`
- `MCP_SERVER_NAME`
- `MCP_SERVER_VERSION`
- `LOG_LEVEL`
- `CRM_API_TIMEOUT_MS`
Do not commit secrets or real tokens to source control. Do not store a permanent admin JWT or any production credential in the project.
## CRM API integration
This project includes a reusable CRM API client for safe read-only access to the existing NewCrm backend APIs.
Current supported endpoint:
- `GET /api/leads`
The service is intentionally restricted to explicitly configured endpoints only. It does not accept arbitrary URLs from MCP users.
Example usage:
```javascript
import { getLeads } from "./src/services/crmApiClient.js";
const result = await getLeads({
authToken: process.env.CRM_API_TEST_AUTH_TOKEN,
});
```
This keeps the integration reusable for future CRM API calls while avoiding direct MongoDB access and write operations.
## Safe testing guidance
For development or testing, pass a user-scoped JWT at runtime from the caller or a local ephemeral environment value. Do not put a shared admin token in `.env`.
Example local test flow:
```bash
$env:CRM_API_TEST_AUTH_TOKEN="<user_jwt_here>"
node --input-type=module -e "import { getLeads } from './src/services/crmApiClient.js'; const result = await getLeads({ authToken: process.env.CRM_API_TEST_AUTH_TOKEN }); console.log(result);"
```
The service will never log the token itself and only sends the `x-auth-token` header when a caller provides it.
## Run the server
```bash
npm start
```
Optional development mode:
```bash
npm run dev
```
## How `/mcp` works
This project uses the official MCP SDK with Streamable HTTP transport.
The server exposes a single MCP endpoint at `/mcp`.
- `POST /mcp` handles MCP JSON-RPC initialization and follow-up requests.
- A new session is created when an initialization request is received.
- Each session stores its associated Streamable HTTP transport.
- `DELETE /mcp` closes a session when it is no longer needed.
- `GET /mcp` currently returns `405 Method Not Allowed` because this foundation does not yet support streaming GET requests.
This is the correct foundation for future tool and backend integrations without adding CRM functionality prematurely.
## Testing the server
After starting the server, confirm it is listening successfully:
```bash
curl -i http://127.0.0.1:3002/mcp
```
Expected behavior:
- The server should respond with HTTP `405` for GET requests on `/mcp`.
- The server should also accept POST requests for MCP initialization and JSON-RPC traffic once a compatible client is connected.
A successful startup is indicated by logs similar to:
```text
{"timestamp":"...","level":"info","message":"NewCrm MCP foundation server started","host":"127.0.0.1","port":3002,"endpoint":"/mcp"}
```
## Notes
This repository is intentionally isolated from the existing NewCrm project. It is a stand-alone MCP foundation server and does not include direct database access or CRM-specific business logic.
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessNo issues