MCP_Tools
README.md
# NestJS MCP Tool Demo
A minimal NestJS app that lets Claude use MCP-style tools backed by hardcoded JSON.
---
## Setup
```bash
npm install
```
Create a `.env` file in the project root:
```
ANTHROPIC_API_KEY=sk-ant-...your key here...
ANTHROPIC_MODEL=claude-2 # optional override; set this to a model your Anthropic key supports
```
Start the server:
```bash
npx nest start --watch
# or: npm run start:dev
```
Server runs on http://localhost:3000
---
## How to test in Postman
### Endpoint
```
POST http://localhost:3000/ai/ask
```
### Headers
```
Content-Type: application/json
```
### Body (raw JSON)
```json
{ "message": "What projects are currently active?" }
```
### More example questions to try
```json
{ "message": "Give me full details about the Alpha Launch project" }
{ "message": "Search for documents about authentication" }
{ "message": "Who owns the Gamma API project and what's the deadline?" }
{ "message": "List all projects and then show me the detail of the on-hold one" }
```
---
## Example Postman response
```json
{
"answer": "There are two active projects:\n1. **Alpha Launch** (p1) — owned by Alice\n2. **Gamma API** (p3) — owned by Carol",
"toolCallsUsed": ["get_project_list"],
"timestamp": "2026-05-18T10:32:00.000Z"
}
```
The `toolCallsUsed` field shows exactly which MCP tools Claude chose to call.
A log of every tool call is also written to `tool-call-log.json` in the project root.
---
## Project structure
```
src/
ai/
tools.ts ← JSON data + tool definitions + executor
ai.service.ts ← calls Claude API, runs the tool loop, writes logs
ai.controller.ts ← POST /ai/ask endpoint
ai.module.ts
app.module.ts
main.ts
```
---
## What happens inside (the tool loop)
1. Postman sends `{ "message": "..." }` to POST /ai/ask
2. NestJS sends message + tool definitions to Claude API
3. Claude replies with `stop_reason: "tool_use"` and picks a tool
4. NestJS runs the tool against the hardcoded JSON → gets result
5. NestJS writes the call to `tool-call-log.json`
6. NestJS sends the result back to Claude
7. Claude gives a final text answer (`stop_reason: "end_turn"`)
8. NestJS returns the answer + list of tools used to Postman
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues