Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ node_modules
npm-debug.log

# Build artifacts
web/dist
cli/build
tui/build
clients/web/dist
clients/cli/build
clients/tui/build

# Environment variables
.env
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/cli_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,17 @@ name: CLI Tests
on:
push:
paths:
- "cli/**"
- "clients/cli/**"
pull_request:
paths:
- "cli/**"
- "clients/cli/**"

jobs:
test:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./cli
working-directory: ./clients/cli
steps:
- uses: actions/checkout@v6

Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/e2e_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,17 +56,17 @@ jobs:
with:
name: playwright-report
path: |
web/playwright-report/
web/test-results/
web/results.json
clients/web/playwright-report/
clients/web/test-results/
clients/web/results.json
retention-days: 2

- name: Publish Playwright Test Summary
uses: daun/playwright-report-summary@v3
if: steps.playwright-tests.conclusion != 'skipped'
with:
create-comment: ${{ github.event.pull_request.head.repo.full_name == github.repository }}
report-file: web/results.json
report-file: clients/web/results.json
comment-title: "🎭 Playwright E2E Test Results"
job-summary: true
icon-style: "emojis"
Expand Down
21 changes: 12 additions & 9 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,22 +3,25 @@
.idea
node_modules/
*-workspace/
web/tsconfig.app.tsbuildinfo
web/tsconfig.node.tsbuildinfo
web/tsconfig.jest.tsbuildinfo
clients/web/tsconfig.app.tsbuildinfo
clients/web/tsconfig.node.tsbuildinfo
clients/web/tsconfig.jest.tsbuildinfo
core/build
cli/build
tui/build
clients/cli/build
clients/tui/build
clients/launcher/build
clients/web/build
clients/web/dist
test-servers/build
test-output
tool-test-output
metadata-test-output
# symlinked by `npm run link:sdk`:
sdk
web/playwright-report/
web/results.json
web/test-results/
web/e2e/test-results/
clients/web/playwright-report/
clients/web/results.json
clients/web/test-results/
clients/web/e2e/test-results/
# Only ignore mcp.json at repo root (configs in configs/ are committed)
/mcp.json
.claude/settings.local.json
Expand Down
8 changes: 5 additions & 3 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
packages
core/build
web/dist
cli/build
tui/build
clients/web/dist
clients/web/build
clients/cli/build
clients/tui/build
clients/launcher/build
test-servers/build
CODE_OF_CONDUCT.md
SECURITY.md
Expand Down
19 changes: 15 additions & 4 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
- Build web: `npm run build-web`
- Development mode: `npm run dev` (use `npm run dev:windows` on Windows)
- Format code: `npm run prettier-fix`
- Web lint: `cd web && npm run lint`
- Web lint: `cd clients/web && npm run lint`

## Code Style Guidelines

Expand All @@ -25,12 +25,23 @@
- Use Tailwind CSS for styling in the web app
- Keep components small and focused on a single responsibility

## Tool Input Parameter Handling

When implementing or modifying tool input parameter handling in the Inspector:

- **Omit optional fields with empty values** - When processing form inputs, omit empty strings or null values for optional parameters, UNLESS the field has an explicit default value in the schema that matches the current value
- **Preserve explicit default values** - If a field schema contains an explicit default (e.g., `default: null`), and the current value matches that default, include it in the request. This is a meaningful value the tool expects
- **Always include required fields** - Preserve required field values even when empty, allowing the MCP server to validate and return appropriate error messages
- **Defer deep validation to the server** - Implement basic field presence checking in the Inspector client, but rely on the MCP server for parameter validation according to its schema

These guidelines maintain clean parameter passing and proper separation of concerns between the Inspector client and MCP servers.

## Project Organization

The project is organized as a monorepo with workspaces:

- `web/`: Web application (Vite, TypeScript, Tailwind)
- `clients/web/`: Web application (Vite, TypeScript, Tailwind)
- `core/`: Core shared code used by web, CLI, and TUI
- `cli/`: Command-line interface for testing and invoking MCP server methods directly
- `tui/`: Terminal user interface
- `clients/cli/`: Command-line interface for testing and invoking MCP server methods directly
- `clients/tui/`: Terminal user interface
- `test-servers/`: Composable MCP test servers, fixtures, and harness
23 changes: 13 additions & 10 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,11 @@ WORKDIR /app
# Copy package files for installation
COPY package*.json ./
COPY .npmrc ./
COPY web/package*.json ./web/
COPY clients/web/package*.json ./clients/web/
COPY core/package*.json ./core/
COPY cli/package*.json ./cli/
COPY tui/package*.json ./tui/
COPY clients/cli/package*.json ./clients/cli/
COPY clients/tui/package*.json ./clients/tui/
COPY clients/launcher/package*.json ./clients/launcher/

# Install dependencies
RUN npm ci --ignore-scripts
Expand All @@ -29,22 +30,24 @@ WORKDIR /app
# Copy package files for production
COPY package*.json ./
COPY .npmrc ./
COPY web/package*.json ./web/
COPY clients/web/package*.json ./clients/web/
COPY core/package*.json ./core/
COPY cli/package*.json ./cli/
COPY tui/package*.json ./tui/
COPY clients/cli/package*.json ./clients/cli/
COPY clients/tui/package*.json ./clients/tui/
COPY clients/launcher/package*.json ./clients/launcher/

# Install only production dependencies
RUN npm ci --omit=dev --ignore-scripts

# Copy built files from builder stage
COPY --from=builder /app/web/dist ./web/dist
COPY --from=builder /app/web/bin ./web/bin
COPY --from=builder /app/cli/build ./cli/build
COPY --from=builder /app/clients/web/dist ./clients/web/dist
COPY --from=builder /app/clients/web/build ./clients/web/build
COPY --from=builder /app/clients/cli/build ./clients/cli/build
COPY --from=builder /app/clients/launcher/build ./clients/launcher/build

# Set default port
ENV PORT=6274
EXPOSE ${PORT}

# Run web app
CMD ["node", "web/bin/start.js"]
CMD ["node", "clients/launcher/build/index.js", "--web"]
Loading