mcp-server
#MCP Server
Production-ready TypeScript Model Context Protocol (MCP) server exposing utility, GitHub, and Microsoft Teams tools over stdio.
## Why this repository
- Clean MCP server baseline for internal automation and integrations
- GitHub and Microsoft Teams operational tooling in a single service
- Strict TypeScript setup and minimal runtime surface
## Feature overview
### Utility
- `echo`
- `get_time`
### GitHub tools
- `github_status`
- `github_authenticated_user`
- `github_list_repos`
- `github_create_issue`
- `github_list_issues`
- `github_get_file`
- `github_create_pull_request`
- `github_request`
### Microsoft Teams tools
- `teams_send_message` (webhook)
- `teams_send_card` (adaptive card webhook)
- `teams_graph_status` (Graph API)
- `teams_send_dm` (Graph API)
## Requirements
- Node.js 20+
- npm 10+
## Quick start (Windows)
```powershell
cd mcp-server
npm install
copy .env.example .env
```
Populate `.env` before running.
## Environment variables
### Required for GitHub tools
- `GITHUB_TOKEN`
### Optional for Teams webhook tools
- `TEAMS_WEBHOOK_URL`
### Optional for Teams Graph tools
- `TEAMS_TENANT_ID`
- `TEAMS_CLIENT_ID`
- `TEAMS_CLIENT_SECRET`
## Scripts
- `npm run dev` — development mode with `tsx`
- `npm run build` — compile to `dist/`
- `npm run start` — run compiled server
- `npm run clean` — remove `dist/`
- `npm run inspect` — open MCP inspector
## Run modes
Development:
```bash
npm run dev
```
Build + run:
```bash
npm run build
npm run start
```
MCP stdio command:
```bash
node dist/index.js
```
## Security and compliance
- Do not commit `.env` or secrets
- Use least-privilege credentials for GitHub and Microsoft Graph
- Review [SECURITY.md](SECURITY.md) before production use
## Contributing
See [CONTRIBUTING.md](CONTRIBUTING.md) and [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md).
## License
Distributed under the MIT License. See [LICENSE](LICENSE).
TDQS
Scored across 14 tools
Each tool targets a distinct function: utilities (echo, get_time), GitHub operations (create, list, read, status), and Teams messaging (send, status). The raw github_request is a fallback, but its distinct purpose is clear.
Tools use three different prefixes (none, github_, teams_), and within each, naming is mixed: verb_noun (create_issue, send_message) vs. noun-like (authenticated_user, status). The pattern is not fully consistent.
14 tools cover three distinct domains (utilities, GitHub, Teams) without being overwhelming. Each tool serves a clear purpose, and the count feels well-scoped for a multi-service integration.
For GitHub, common operations are present but missing updates/deletes and PR merging. For Teams, only sending is available (no reading, listing). The utilities are minimal. Notable gaps exist, but core workflows are covered.