Thanks for your interest in contributing. Observer is a transparent MCP proxy for agent observability, built with Go and SQLite.
- Bug fixes - Check issues labeled
bug - Features - Check issues labeled
enhancementorgood first issue - Trace tools - Add new tools under the
trace.*namespace - Filtering - Improve tool filtering strategies to reduce token overhead
- Transports - Add SSE, HTTP transport support (currently stdio only)
- Docs - Improve README, add examples, write guides
- Tests - Add test coverage for proxy and store packages
git clone https://github.com/valtors/observer.git
cd observer
go mod tidy
go build .main.go Entry point, CLI flags
internal/
proxy/
config.go Configuration from env vars
proxy.go MCP proxy core (JSON-RPC, tool interception, trace tools)
store/
db.go SQLite open + migrations
queries.go All database queries (tool calls, sessions, stats)
# Build
go build .
# Run with a test server
OBSERVER_TARGET="npx -y @modelcontextprotocol/server-filesystem /tmp" go run .
# Test trace tools manually
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}' | go run .If you are using an AI coding agent (Claude Code, Codex, Cline, etc.) to contribute:
- Read the code first - Have your agent read
proxy.goandqueries.gobefore making changes. The codebase is small and self-contained. - No comments - We do not use code comments. The code should be self-documenting.
- Test your build - Run
go build .before committing. Ensure it compiles. - Keep it minimal - Observer is intentionally small. Do not add dependencies unless absolutely necessary.
- SQLite only - All storage goes through the
storepackage. Do not add other databases. - MCP protocol - If adding protocol features, reference the MCP spec at modelcontextprotocol.io.
- Fork the repo and create a branch from
main - Make your changes
- Ensure
go build .passes - If adding a new trace tool, update the README
- Use the PR template when opening a PR
- Short, lowercase commit messages (e.g.,
fix: handle empty tools list)
Be respectful. Help others. Focus on the problem, not the person.