Skip to content

Commit e63bced

Browse files
irparentclaude
andcommitted
Initial release: Iris MCP-native agent eval & observability server
Complete implementation including: - MCP server with log_trace, evaluate_output, get_traces tools - MCP resources: dashboard summary and trace detail - SQLite storage with WAL mode and migration system - Eval engine with completeness, relevance, safety, cost rules + custom rules - Stdio and HTTP transports via MCP SDK - React dashboard with dark theme (traces, evals, summary charts) - Production security: API key auth, CORS, rate limiting, helmet, input validation, ReDoS protection, error handling, structured logging - Docker + docker-compose + GitHub Actions CI/CD - Examples: Claude Desktop, TypeScript, LangChain, CrewAI - Demo scripts, landing page, blog post, launch content - 117 passing tests (unit + integration) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
0 parents  commit e63bced

152 files changed

Lines changed: 15421 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
name: Bug Report
2+
description: Report a bug in Iris MCP server
3+
labels: ["bug", "needs-triage"]
4+
body:
5+
- type: markdown
6+
attributes:
7+
value: Thanks for reporting a bug! Please fill out the form below.
8+
- type: textarea
9+
id: description
10+
attributes:
11+
label: Description
12+
description: A clear description of the bug
13+
validations:
14+
required: true
15+
- type: textarea
16+
id: steps
17+
attributes:
18+
label: Steps to Reproduce
19+
description: Steps to reproduce the behavior
20+
placeholder: |
21+
1. Start server with '...'
22+
2. Call tool '...'
23+
3. See error
24+
validations:
25+
required: true
26+
- type: textarea
27+
id: expected
28+
attributes:
29+
label: Expected Behavior
30+
description: What you expected to happen
31+
validations:
32+
required: true
33+
- type: textarea
34+
id: actual
35+
attributes:
36+
label: Actual Behavior
37+
description: What actually happened
38+
validations:
39+
required: true
40+
- type: input
41+
id: version
42+
attributes:
43+
label: Iris Version
44+
placeholder: "0.1.0"
45+
validations:
46+
required: true
47+
- type: dropdown
48+
id: transport
49+
attributes:
50+
label: Transport
51+
options:
52+
- stdio
53+
- http
54+
validations:
55+
required: true
56+
- type: input
57+
id: node-version
58+
attributes:
59+
label: Node.js Version
60+
placeholder: "20.x"
61+
- type: input
62+
id: os
63+
attributes:
64+
label: Operating System
65+
placeholder: "macOS 14, Ubuntu 22.04, Windows 11"
66+
- type: textarea
67+
id: logs
68+
attributes:
69+
label: Relevant Logs
70+
description: Paste any relevant log output
71+
render: shell

.github/ISSUE_TEMPLATE/config.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
blank_issues_enabled: false
2+
contact_links:
3+
- name: Questions & Discussion
4+
url: https://github.com/iris-eval/mcp-server/discussions
5+
about: Ask questions and discuss ideas
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
name: Feature Request
2+
description: Suggest a new feature or improvement
3+
labels: ["enhancement"]
4+
body:
5+
- type: markdown
6+
attributes:
7+
value: Thanks for suggesting a feature! Please describe what you'd like.
8+
- type: textarea
9+
id: problem
10+
attributes:
11+
label: Problem
12+
description: What problem does this feature solve?
13+
validations:
14+
required: true
15+
- type: textarea
16+
id: solution
17+
attributes:
18+
label: Proposed Solution
19+
description: How would you like this to work?
20+
validations:
21+
required: true
22+
- type: textarea
23+
id: alternatives
24+
attributes:
25+
label: Alternatives Considered
26+
description: Any alternative approaches you've thought about?
27+
- type: textarea
28+
id: context
29+
attributes:
30+
label: Additional Context
31+
description: Any other context, screenshots, or examples

.github/PULL_REQUEST_TEMPLATE.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
## Summary
2+
3+
<!-- Brief description of what this PR does -->
4+
5+
## Type of Change
6+
7+
- [ ] Bug fix
8+
- [ ] New feature
9+
- [ ] Breaking change
10+
- [ ] Documentation
11+
- [ ] Refactoring
12+
13+
## Testing
14+
15+
- [ ] Unit tests added/updated
16+
- [ ] Integration tests added/updated
17+
- [ ] Manual testing performed
18+
19+
## Checklist
20+
21+
- [ ] `npm run typecheck` passes
22+
- [ ] `npm run lint` passes
23+
- [ ] `npm test` passes
24+
- [ ] Documentation updated (if applicable)

.github/workflows/ci.yml

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
name: CI
2+
3+
on:
4+
push:
5+
branches: [main]
6+
pull_request:
7+
branches: [main]
8+
9+
jobs:
10+
lint-and-typecheck:
11+
runs-on: ubuntu-latest
12+
defaults:
13+
run:
14+
working-directory: iris
15+
steps:
16+
- uses: actions/checkout@v4
17+
- uses: actions/setup-node@v4
18+
with:
19+
node-version: 20
20+
cache: npm
21+
cache-dependency-path: iris/package-lock.json
22+
- run: npm ci
23+
- run: npm run lint
24+
- run: npm run typecheck
25+
26+
test:
27+
runs-on: ubuntu-latest
28+
strategy:
29+
matrix:
30+
node-version: [18, 20, 22]
31+
defaults:
32+
run:
33+
working-directory: iris
34+
steps:
35+
- uses: actions/checkout@v4
36+
- uses: actions/setup-node@v4
37+
with:
38+
node-version: ${{ matrix.node-version }}
39+
cache: npm
40+
cache-dependency-path: iris/package-lock.json
41+
- run: npm ci
42+
- run: npm test
43+
44+
integration:
45+
runs-on: ubuntu-latest
46+
needs: test
47+
defaults:
48+
run:
49+
working-directory: iris
50+
steps:
51+
- uses: actions/checkout@v4
52+
- uses: actions/setup-node@v4
53+
with:
54+
node-version: 20
55+
cache: npm
56+
cache-dependency-path: iris/package-lock.json
57+
- run: npm ci
58+
- run: npm run test:integration
59+
60+
build:
61+
runs-on: ubuntu-latest
62+
needs: [lint-and-typecheck, test]
63+
defaults:
64+
run:
65+
working-directory: iris
66+
steps:
67+
- uses: actions/checkout@v4
68+
- uses: actions/setup-node@v4
69+
with:
70+
node-version: 20
71+
cache: npm
72+
cache-dependency-path: iris/package-lock.json
73+
- run: npm ci
74+
- run: npm run build
75+
- run: cd dashboard && npm ci && npm run build

.github/workflows/release.yml

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
name: Release
2+
3+
on:
4+
push:
5+
tags:
6+
- 'v*'
7+
8+
permissions:
9+
contents: write
10+
packages: write
11+
id-token: write
12+
13+
jobs:
14+
validate:
15+
runs-on: ubuntu-latest
16+
defaults:
17+
run:
18+
working-directory: iris
19+
steps:
20+
- uses: actions/checkout@v4
21+
- uses: actions/setup-node@v4
22+
with:
23+
node-version: 20
24+
cache: npm
25+
cache-dependency-path: iris/package-lock.json
26+
- run: npm ci
27+
- run: npm run typecheck
28+
- run: npm test
29+
- run: npm run build
30+
31+
publish-npm:
32+
needs: validate
33+
runs-on: ubuntu-latest
34+
defaults:
35+
run:
36+
working-directory: iris
37+
steps:
38+
- uses: actions/checkout@v4
39+
- uses: actions/setup-node@v4
40+
with:
41+
node-version: 20
42+
registry-url: https://registry.npmjs.org
43+
cache: npm
44+
cache-dependency-path: iris/package-lock.json
45+
- run: npm ci
46+
- run: npm run build
47+
- run: cd dashboard && npm ci && npm run build
48+
- run: npm publish --provenance --access public
49+
env:
50+
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
51+
52+
publish-docker:
53+
needs: validate
54+
runs-on: ubuntu-latest
55+
steps:
56+
- uses: actions/checkout@v4
57+
- uses: docker/setup-qemu-action@v3
58+
- uses: docker/setup-buildx-action@v3
59+
- uses: docker/login-action@v3
60+
with:
61+
registry: ghcr.io
62+
username: ${{ github.actor }}
63+
password: ${{ secrets.GITHUB_TOKEN }}
64+
- uses: docker/build-push-action@v5
65+
with:
66+
context: iris
67+
platforms: linux/amd64,linux/arm64
68+
push: true
69+
tags: |
70+
ghcr.io/${{ github.repository }}/iris-mcp:${{ github.ref_name }}
71+
ghcr.io/${{ github.repository }}/iris-mcp:latest
72+
73+
github-release:
74+
needs: [publish-npm, publish-docker]
75+
runs-on: ubuntu-latest
76+
steps:
77+
- uses: actions/checkout@v4
78+
- uses: softprops/action-gh-release@v1
79+
with:
80+
generate_release_notes: true

.gitignore

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
.claude/
2+
ai-council/
3+
node_modules/
4+
dist/
5+
*.db
6+
*.db-journal
7+
*.db-wal
8+
*.db-shm
9+
coverage/
10+
.env
11+
.env.*
12+
data/
13+
.DS_Store
14+
*.tsbuildinfo

iris/.dockerignore

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
node_modules
2+
.git
3+
coverage
4+
src
5+
tests
6+
*.db
7+
*.db-journal
8+
*.db-wal
9+
.env
10+
.env.*
11+
dashboard/node_modules

iris/.eslintrc.json

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"root": true,
3+
"env": {
4+
"node": true,
5+
"es2022": true
6+
},
7+
"parser": "@typescript-eslint/parser",
8+
"parserOptions": {
9+
"ecmaVersion": 2022,
10+
"sourceType": "module"
11+
},
12+
"rules": {
13+
"no-unused-vars": "off",
14+
"no-console": "warn"
15+
}
16+
}

iris/.gitignore

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
node_modules/
2+
dist/
3+
*.db
4+
*.db-journal
5+
*.db-wal
6+
*.db-shm
7+
coverage/
8+
.env
9+
.env.*
10+
data/
11+
.DS_Store
12+
*.tsbuildinfo

0 commit comments

Comments
 (0)