tamim-mcp-server
Allows GitHub Copilot to convert images to PDF and check server time via MCP protocol.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@tamim-mcp-serverconvert these three images to a PDF"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
tamim-mcp-server
A local MCP (Model Context Protocol) server that converts images to PDF. Supports any AI agent via two transport modes:
Streamable HTTP — for Cursor, Claude Code, and any HTTP-capable MCP client
stdio — for Claude Desktop, VS Code MCP, Cline, Roo Code, Windsurf, Continue, and any stdio-spawning agent
What's inside
Tool | Description |
| Convert local files, URLs, or base64 data into a single PDF |
| Sanity-check tool to confirm the connection is working |
Related MCP server: img-convert MCP Server
File structure
tamim-mcp-server/
├── src/
│ ├── server.ts # Fastify HTTP transport (Streamable HTTP)
│ ├── stdio-server.ts # stdio transport
│ ├── mcp.ts # createMcpServer() factory
│ ├── config.ts # env vars (port, token)
│ └── tools/
│ ├── index.ts # registerTools() - wires every tool in
│ ├── time.ts # get_server_time
│ └── imagesToPdf.ts # convert_images_to_pdf
├── .env.example
├── .gitignore
├── package.json
├── tsconfig.json
└── README.md1. Install
npm install
cp .env.example .env
# open .env and set MCP_TOKEN (openssl rand -hex 24), or leave it blank for no auth2. Run it
npm run dev # tsx watch, auto-reloads on save
# or, for a built version:
npm run build && npm startYou should see:
MCP server ready on http://127.0.0.1:8787/mcp3. Test it before touching any client
curl -i -X POST http://127.0.0.1:8787/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"curl","version":"1"}}}'A 200 OK with a mcp-session-id header back means the server is healthy.
Or use the official MCP Inspector for a UI instead of raw curl:
npx @modelcontextprotocol/inspector
# point it at http://127.0.0.1:8787/mcp4. Connect any AI agent
HTTP agents (server must already be running)
Cursor
.cursor/mcp.json (project root) or ~/.cursor/mcp.json (global):
{
"mcpServers": {
"tamim-local-mcp": {
"url": "http://127.0.0.1:8787/mcp",
"headers": { "Authorization": "Bearer YOUR_TOKEN_HERE" }
}
}
}Omit the headers block entirely if you left MCP_TOKEN blank.
Claude Code
claude mcp add --transport http tamim-local-mcp http://127.0.0.1:8787/mcp \
--header "Authorization: Bearer YOUR_TOKEN_HERE"stdio agents (auto-spawned, no manual server start needed)
Claude Desktop
claude_desktop_config.json:
{
"mcpServers": {
"tamim-local-mcp": {
"command": "npx",
"args": ["-y", "tamim-mcp-stdio"]
}
}
}If you installed locally instead of publishing to npm:
{
"mcpServers": {
"tamim-local-mcp": {
"command": "node",
"args": ["dist/stdio-server.js"],
"cwd": "/absolute/path/to/tamim-mcp-server"
}
}
}VS Code / GitHub Copilot
.vscode/mcp.json (project root):
{
"servers": {
"tamim-local-mcp": {
"command": "node",
"args": ["dist/stdio-server.js"],
"cwd": "${workspaceFolder}"
}
}
}Cline / Roo Code
~/.cline/mcp.json or ~/.roo/mcp.json:
{
"mcpServers": {
"tamim-local-mcp": {
"command": "node",
"args": ["dist/stdio-server.js"],
"cwd": "/absolute/path/to/tamim-mcp-server"
}
}
}Windsurf
.windsurf/mcp.json:
{
"mcpServers": {
"tamim-local-mcp": {
"command": "node",
"args": ["dist/stdio-server.js"],
"cwd": "/absolute/path/to/tamim-mcp-server"
}
}
}Continue
.continue/config.yaml:
mcpServers:
- name: tamim-local-mcp
command: node
args:
- dist/stdio-server.js
cwd: /absolute/path/to/tamim-mcp-serverGeneric stdio config (works with any MCP client)
{
"command": "node",
"args": ["dist/stdio-server.js"],
"cwd": "/absolute/path/to/tamim-mcp-server"
}5. Tool usage
convert_images_to_pdf
Accepts images from three sources (at least one required):
// Local file paths
{
"imagePaths": ["/path/to/photo1.jpg", "/path/to/photo2.png"],
"outputPath": "/path/to/output.pdf"
}
// URLs
{
"urls": ["https://example.com/image1.jpg", "https://example.com/image2.png"],
"outputPath": "/path/to/output.pdf"
}
// Base64 data
{
"base64Images": ["/9j/4AAQSkZJRg...", "iVBORw0KGgo..."],
"outputPath": "/path/to/output.pdf"
}
// Mix of all three
{
"imagePaths": ["/path/local.jpg"],
"urls": ["https://example.com/photo.png"],
"base64Images": ["iVBORw0KGgo..."],
"outputPath": "/path/to/output.pdf"
}Options:
pageSize:"fit"(default) — each page matches its image, or"a4"— centers on A4marginPt: margin in points when using A4 (default: 24)
get_server_time
No parameters. Returns the current server time in ISO format.
Keeping it running (HTTP mode)
HTTP-based MCP servers don't get auto-started by the client the way stdio ones do - the server has to already be running when HTTP clients try to connect. Options, easiest first:
Leave
npm run devin a spare terminal tabpm2 start dist/server.js --name mcpto survive terminal closes and auto-restart on crash
stdio mode does not need this — the agent spawns the process itself.
Adding a new tool
Create
src/tools/yourTool.tsexportingregisterYourTool(server)Call it from
src/tools/index.tsKeep the tool narrow - one job, a tight zod schema, a description that tells the model exactly when to use it and what format inputs should be in
Security notes
The HTTP server binds to
127.0.0.1only - not reachable from outside this machineDNS rebinding protection is applied automatically by
@modelcontextprotocol/fastifySet
MCP_TOKENto require a bearer token even for local HTTP callsstdio transport is inherently authenticated by process spawn — no token needed
Keep total tools per server in the 6-10 range - Cursor caps out around 40 active tools across all connected servers combined
npx @modelcontextprotocol/inspector node dist/stdio-server.js
node dist/cli.js image.png
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityDmaintenanceConverts PDF files from local storage or URLs to structured Markdown format using Mistral AI's OCR API, preserving document structure and extracting images.Last updated21MIT
- Alicense-qualityDmaintenanceProvides AI agents with tools to convert images between formats and inspect image metadata, enabling seamless image processing within agent workflows.Last updated93MIT
- Flicense-qualityCmaintenanceA local PDF manipulation server for AI agents that provides tools for merging, splitting, extracting info, and converting images to PDF, all without uploading files.Last updated
- AlicenseBqualityBmaintenanceEnables AI agents to generate PDFs from Markdown or URLs, extract text, merge documents, and perform text conversions via the Model Context Protocol.Last updated81MIT
Related MCP Connectors
Generate images, GIFs, and PDFs from HTML, URLs, or templates — from your AI agent.
OCR, transcription, file extraction, and image generation for AI agents via MCP.
Convert files, HTML, and Markdown to PDF via the FileToPDF API. Bring your own API key.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/TamimLikhon/image2pdf-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server