Oracle3
Oracle3: 예측시장 거래 엔진·MCP 서버
Tradstry는 브로커 연동 거래 일지로, 플레이북·성과 분석·내장 MCP 서버를 제공해 AI 도구가 기록에 안전히 연동됩니다
Tradstry is a brokerage-synced trading journal with playbooks, performance analytics, and a built-in MCP server that lets compatible AI tools securely work with your trading record.
금융Rust · TypeScriptGitHub @Johnson-f온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기A better trading journal software built for traders
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Tradstry is a trading journal and analytics web app for stock and options traders. It connects brokerage activity to trade records, performance reports, playbooks, principles, and notebook entries.
The repository also contains an authenticated MCP server for AI clients and a native macOS app prototype. The desktop prototype uses AppKit, displays sample data, and keeps newly entered notes only for the current session; it is not yet connected to the web app's accounts or backend.README 전문 보기 ↗Tradstry is a trading journal and analytics web app for stock and options traders. It connects brokerage activity to trade records, performance reports, playbooks, principles, and notebook entries.
The repository also contains an authenticated MCP server for AI clients and a native macOS app prototype. The desktop prototype uses AppKit, displays sample data, and keeps newly entered notes only for the current session; it is not yet connected to the web app's accounts or backend.
| Area | Implementation |
|---|---|
| Web app | Next.js 16, React 19, TypeScript, Tailwind CSS 4, Radix/shadcn UI |
| Web data and editing | TanStack Query/Table, Zustand, Lexical, Yjs, Recharts |
| Backend | Rust 2024 edition, Actix Web, async-graphql, REST endpoints, GraphQL subscriptions |
| Database | PostgreSQL 18, SeaORM and SQLx; pgvector and ParadeDB pg_search for search |
| AI runtime | TinyAgents 2, configurable Gemini or Perplexity models; Voyage embeddings and reranking |
| Authentication | Stytch |
| Media storage | Cloudflare R2 through the S3-compatible API |
| Market data | finance-query, with Polygon and Financial Modeling Prep integrations |
| Brokerage adapter | Go and gRPC over a private Unix socket |
| MCP server | Go, MCP Go SDK; Stytch Connected Apps OAuth, Streamable HTTP at /mcp, a client of the backend's GraphQL API |
| Cache and rate limits | Redis; optional for the main backend, required by the MCP server |
| Desktop prototype | Swift 6, AppKit, macOS 26+, XcodeGen |
| Tooling and hosting | Bun, Biome, Docker Compose, Caddy, GitHub Actions; Vercel configuration for the website |
apps/
website/ Next.js routes, landing pages, authentication, web integration
desktop/ Native AppKit prototype and XcodeGen project specification
packages/
app-ui/ Product screens, hooks, services, and web platform interface
notebook-core/ Shared Lexical nodes, document structure, and Yjs helpers
ui/ Shared React primitives
backend/
src/ HTTP server, GraphQL, domain services, background workers
database/ SeaORM entities, connection setup, and schema bootstrap
migration/ Database migrations and schema support
projector/ Bun helpers that turn notebook updates into document data
proto/ Versioned SnapTrade protobuf contract
tests/ Backend integration checks
microservice/
snaptrade-service/ Go SnapTrade adapter
tradstry-mcp/ Go MCP server
devops/
Makefile Local service and deployment commands
compose.yml Production service stack
docker/ Backend, MCP, SnapTrade, and Postgres image builds
caddy/ Reverse proxy configuration
scripts/ Deployment and operations scripts
.github/workflows/ Pull request checks and production image/deployment workflow
The website calls the Rust backend over GraphQL and HTTP. The backend stores application data in Postgres, media in R2, and calls the Go adapter for SnapTrade operations. AI jobs and search also use Postgres. The MCP process shares backend services and database access, and uses Stytch authentication and Redis rate limits.
Run commands from the repository root unless a block changes directories.
ffmpeg and ffprobe for video processing.bun install --frozen-lockfile
(cd backend/projector && bun install --frozen-lockfile)
bun run --cwd backend/projector sync-core
The projector has its own dependencies outside the root Bun workspace. The backend can regenerate missing notebook bundles on startup, but its dependencies must already be installed.
For a new checkout, copy the templates without replacing existing local configuration:
cp -n apps/website/.env.example apps/website/.env.local
cp -n backend/.env.example backend/.env
In apps/website/.env.local, fill in the Stytch public token (and custom domain, if the test project has one) and set the full GraphQL URL:
NEXT_PUBLIC_BACKEND_URL=http://localhost:7899/graphql
In backend/.env, use these local database and browser origins:
POSTGRES_URL=postgres://postgres:tradstry@localhost:5433/postgres
POSTGRES_DATABASE=dev
BACKEND_PORT=7899
CORS_ALLOWED_ORIGINS=http://localhost:3038,http://127.0.0.1:3038
SNAPTRADE_OAUTH_REDIRECT_URI=http://localhost:7899/oauth/snaptrade/callback
SNAPTRADE_OAUTH_FRONTEND_RETURN_URL=http://localhost:3038/dashboard/brokerage/oauth/callback
POSTGRES_DATABASE=dev selects the tradstry_dev schema inside the database named in POSTGRES_URL. Database schema bootstrap runs when the backend connects.
Fill in the remaining settings in backend/.env.example:
STYTCH_PROJECT_ID and STYTCH_SECRET, from the same Stytch test project as the website, and STYTCH_ISSUER if it has a custom domain.R2_ACCOUNT_ID, R2_ACCESS_KEY_ID, R2_SECRET_ACCESS_KEY, and R2_BUCKET for notebook media.SNAPTRADE_INTERNAL_SECRET with at least 32 bytes, shared with the Go adapter; SNAPTRADE_CONSUMER_KEY; and BROKERAGE_ENCRYPTION_KEY, a base64-encoded 32-byte key.POLYGON_API_KEY and FMP_API_KEY for the corresponding market data providers.Leave AGENTS_V2_ENABLED=false to keep in-app AI workers disabled. To enable them, set it to true, choose AGENT_MODEL_PROVIDER, fill in the fast/reasoning/vision model names, and supply the selected provider's API key plus VOYAGE_API_KEY. Optional Redis, Sentry, and browser push settings are also listed in the template.
Create microservice/snaptrade-service/.env with:
SNAPTRADE_CLIENT_ID=your_client_id
SNAPTRADE_CONSUMER_KEY=your_consumer_key
SNAPTRADE_OAUTH_CLIENT_ID=your_oauth_client_id
SNAPTRADE_OAUTH_CLIENT_SECRET=your_oauth_client_secret
SNAPTRADE_INTERNAL_SECRET=the_same_secret_as_the_backend
SNAPTRADE_GRPC_SOCKET=/tmp/tradstry-snaptrade.sock
Start it in its own terminal:
make micro
The adapter uses a private Unix socket, not a public HTTP port. Keep the socket path and shared secret consistent with the backend. See microservice/README.md for the adapter contract and protobuf generation commands.
In separate terminals:
make backend
make frontend
Default local addresses:
| Service | Address |
|---|---|
| Website | http://localhost:3038 |
| Backend GraphQL | http://localhost:7899/graphql |
| Backend health | http://localhost:7899/health |
| Postgres | localhost:5433 |
make backend starts Postgres and then runs tradstry-backend. It sets the connection URL from PG_PORT and PG_DATABASE, overriding POSTGRES_URL in the backend environment file. Defaults are port 5433 and database postgres; ignored devops/local.mk can override them and BACKEND_PORT.
For an existing external database, run cargo run --bin tradstry-backend from backend/ to use its environment file directly. If you change the backend port, also update the website GraphQL URL and SnapTrade redirect URL.
The MCP server lives in microservice/tradstry-mcp and talks only to the backend's GraphQL API. make mcp starts Redis, the backend unless one is running, and the server on http://localhost:7910/mcp, signed in through the Stytch test project:
make mcp
claude mcp add --transport http tradstry http://localhost:7910/mcp
See microservice/tradstry-mcp/README.md for its tools and configuration. Its /health and OAuth discovery routes are public; tool calls require a Stytch Connected Apps access token.
Generate the Xcode project from apps/desktop/project.yml, then build and open the local app:
cd apps/desktop
xcodegen generate
xcodebuild -project Tradstry.xcodeproj -scheme Tradstry \
-configuration Debug -destination 'platform=macOS' \
CODE_SIGNING_ALLOWED=NO build
open build/Debug/Tradstry.app
The generated Xcode project and build/ directory are ignored by Git. Use these direct commands: the root make desktop target currently points to a desktop Makefile that is absent.
From the repository root:
# Web and shared packages
bun run typecheck:app-ui
bunx tsc --noEmit -p apps/website/tsconfig.json
bun run test:packages
bun run build:website
bun run --cwd apps/website lint
# Notebook document helpers
bun run --cwd backend/projector test
# Rust checks used by CI
(cd backend && cargo fmt --all -- --check)
(cd backend && cargo check --all-targets)
(cd backend && cargo clippy --all-targets --all-features -- -D warnings)
# Backend workspace tests
(cd backend && cargo test --workspace)
# SnapTrade adapter
(cd microservice/snaptrade-service && go test ./...)
(cd microservice/snaptrade-service && go vet ./...)
Database integration tests need a separate test Postgres database with the required extensions. Set TEST_DATABASE_URL for that database; do not point it at application data. Notebook tests also need the projector dependencies above.
devops/compose.yml defines the backend, MCP server, SnapTrade adapter, Postgres, Redis, Caddy, and container health management. Website deployment is separate from this stack.
main or master. It does not currently run the frontend or test suites.master or manual dispatch, reuses the Rust checks, builds backend/MCP/SnapTrade images tagged sha-<commit>, deploys the exact commit through the GitHub Production environment, and promotes successfully deployed images to latest.make deploy is an emergency deployment command for already-built origin/master images. Release tags are not required by the deployment workflow.This project is proprietary software. All rights reserved.