Finance Toolkit
500+ transparent financial methods calculated from raw statements, not third-party endpoints.
제작자가 쓴 설명(영어 원문)
Log hours and invoice clients from your AI chat. Time tracking and invoicing for freelancers.
이 세 가지는 절대 하나의 점수로 합치지 않아요. 의견, 측정, 인기는 서로 다른 것이니까요.
이 서버는 아직 쉬운 말로 된 요약을 쓰지 못했어요. 아래는 레지스트리에서 읽어 온 사실이에요.
쓰고 있는 AI 앱을 고른 다음 설정을 복사하세요.
필요한 것
어떤 앱을 쓰세요?
위에서 앱을 고르세요. 기억해 두었다가 다음부터는 버튼에 “…에 설치”라고 표시해요.
웹, 데스크톱, 모바일의 Claude에서 쓸 수 있어요:
https://withtallied.com/mcp터미널에서 이 명령어를 실행하세요
claude mcp add --transport http tallied https://withtallied.com/mcp프로젝트의 .cursor/mcp.json 또는 ~/.cursor/mcp.json에 붙여 넣으세요
{
"mcpServers": {
"tallied": {
"url": "https://withtallied.com/mcp"
}
}
}브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
프로젝트의 .vscode/mcp.json에 붙여 넣으세요
{
"servers": {
"tallied": {
"type": "http",
"url": "https://withtallied.com/mcp"
}
}
}브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
ChatGPT는 인터넷에 있는 서버에만 연결할 수 있어요:
https://withtallied.com/mcp메뉴 이름은 요금제나 시기에 따라 조금 다를 수 있어요.
선택한 앱은 이 기기의 쿠키에만 저장돼요. 계정은 필요 없어요.
이 설정은 제작자의 레지스트리 정보로 만들었어요. README와 다르면 README를 따르세요.
아직 이 서버의 도구 목록을 읽지 않았어요. 엔드포인트는 차례대로 돌아가며 점검해요.
누구나 볼 수 있는 정보를 점검했고, 코드는 읽지 않았어요. 해당하지 않는 항목은 개수에서 뺐어요. · 2026년 11월 8일 점검
게시자(withtallied.com)가 저장소 소유자(connerj70)가 아니에요. 다른 사람이 등록했을 수 있어요
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
아직 점검하지 않았어요. 엔드포인트는 차례대로 돌아가며 점검해요
아직 점검하지 않았어요. 엔드포인트는 차례대로 돌아가며 점검해요
아직 점검하지 않았어요. 엔드포인트를 점검할 때 도구 목록을 읽어요
레지스트리에서 이 카테고리의 활성 서버 전체와 비교했어요. 스타는 게시자가 저장소를 소유한 경우에만 세요.
해당하는 기본 점검 1개 중 0개를 통과했어요. 코드는 읽지 않았어요. 키나 토큰을 넣기 전에 서버가 어떤 권한을 요구하는지 확인하고, 꼭 필요한 권한만 있는 키를 쓰세요.
레지스트리에 필수 키가 나와 있지 않아요. 다만 처음 쓸 때 로그인을 요구하는 서버도 있어요.
제작자의 클라우드에서 실행돼요. 설치 없이 인터넷으로 연결하지만, 보내는 내용은 제작자의 서버를 거쳐요.
GitHub 저장소는 마지막으로 – 변경됐고, 최신 버전(0.1.0)은 2개월 전 레지스트리에 올라왔어요.
Claude Desktop, Claude Code, Cursor, VS Code처럼 MCP를 지원하는 앱에서 쓸 수 있어요. URL로 연결되기 때문에, 원격 MCP 서버를 지원하는 앱(예: 개발자 모드의 ChatGPT)에서도 쓸 수 있어요.
같은 카테고리에는: Finance Toolkit, SolidInvoice, Korea Tax Calculator
같은 카테고리에서 다른 제작자가 만든 서버예요. 스타 순으로 정렬했어요.
카드 보는 법:↓ 주간 다운로드i★ GitHub 스타i세 기둥: 리뷰 · 점검 · 사용 정도i업데이트 = 최신 버전을 레지스트리에 공개한 날i
500+ transparent financial methods calculated from raw statements, not third-party endpoints.
Create and send invoices and quotes, manage clients, and track payments in SolidInvoice.
Korean tax calculation and tax-audit judgment MCP: 96 tools with statutory citations.
제작자의 저장소에서 쓰인 그대로 가져왔어요. PopNx MCP가 검토하거나 보증한 내용이 아니에요. HTML, 이미지, 스크립트는 제거했어요. 링크를 누르면 이 사이트를 벗어나요.
Tallied is a time-tracking and invoicing MCP server. It's connector-first: Claude and ChatGPT (or any MCP client) are the primary UI — you tell an assistant what you worked on and it logs the hours, ask what's unbilled and it drafts the invoice. A minimal web app handles the things chat is bad at: account settings, CSV import, and billing. Clients pay invoices through a Stripe payment link on a public, tokenized page.
Claude / ChatGPT / MCP client
│ MCP over Streamable HTTP (OAuth 2.1 bearer token) ▼ ┌───────────────────────────────────────────────┐ │ one origin (BASE_URL) │ │ /mcp MCP endpoint │ │ /authorize /token /register /revoke │ │ OAuth 2.1 authorization server│ │ /app/* web app (settings, import, │ │ billing) │ │ /i/ public invoice page + PDF │ └───────────────────────────────────────────────┘ │ │ │ ▼ ▼ ▼ Postgres Stripe SMTP / Resend (workspaces, entries, (subscriptions, (magic links, invoices, tokens, payment links) invoice emails) audit log) pdfkit (invoice PDFs, in-process)
cp .env.example .env
npm install npm run db:up # postgres via docker compose, localhost:5433 npm run db:migrate # applies src/db/schema.sql idempotently npm run db:seed # seeds a demo workspace; prints the login email
npm run build:app # builds the MCP App UI bundle into app/dist/app.html npm run dev # tsx watch src/index.ts
Then connect with the MCP Inspector:
npm run inspector
Choose Streamable HTTP, point it at http://localhost:3000/mcp, and connect. The inspector will hit the OAuth flow and open the login page in your browser. Without SMTP_URL or RESEND_API_KEY set, magic-link sign-in doesn't send an email — the link is printed to the server log and also shown directly on the "check your email" page, so local dev never needs a real mailbox.
src/
index.ts entry point config.ts env vars, plans, scopes db/ schema.sql, migration runner, query helpers lib/ dates, duration parsing, rates, ids, errors, money services/ workspace, time entries, invoices, propose (catch-up), audit mcp/ McpServer setup: tools, resources, prompts (src/mcp/server.ts) auth/ OAuth provider, login/consent routes, sessions, Google OIDC http/ express app, docs/marketing routes, web app routes, invoice pages import/ CSV import (Toggl/Harvest/Clockify) stripe/ billing checkout, Connect onboarding, webhook handling email/ email sending via SMTP (nodemailer) or Resend (magic links, invoice emails) pdf/ invoice PDF rendering (pdfkit) app/ MCP App UI source; scripts/build-app.ts bundles it into app/dist/app.html, which src/mcp/app-resource.ts embeds as an MCP UI resource and src/http/routes/invoice-public.ts reuses for the public invoice page skills/ bundled Claude skills (log-day, catch-up, weekly-report, invoice-client, month-close) — also exposed as MCP prompts .claude-plugin/ Claude plugin/connector manifest .codex-plugin/ ChatGPT/Codex plugin manifest docs/ privacy.md, terms.md, docs.md, landing.md, llms.txt — served live at /privacy, /terms, /docs, /, and /llms.txt by src/http/routes/docs.ts test/ unit tests (vitest) and the golden prompt set
| Variable | Required | Purpose |
|---|---|---|
NODE_ENV | no (default development) | production enables prod-only behavior (rate limiting, no dev magic-link shortcut) |
PORT | no (default 3000) | HTTP port |
BASE_URL | no (default http://localhost:3000) | Public origin. Everything — MCP, OAuth, web app, invoice pages — is served from here by default |
MCP_URL | no (default ${BASE_URL}/mcp) | Override to put the MCP endpoint on its own subdomain |
AUTH_ISSUER_URL | no (default BASE_URL) | Override to put the OAuth authorization server on its own subdomain |
APP_URL | no (default ${BASE_URL}/app) | Override to put the web app on its own subdomain |
DATABASE_URL | no (default local docker-compose Postgres) | Postgres connection string |
SESSION_SECRET | yes in production | Signs session cookies and magic links; openssl rand -hex 32 |
GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRET | no | Enables "Continue with Google"; omit to offer only magic links |
REVIEWER_EMAIL / REVIEWER_ACCESS_CODE | no | Enables an access-code sign-in for directory reviewers into one seeded account. Remove after review |
SMTP_URL | no | Any SMTP provider, e.g. smtps://LOGIN:KEY@smtp-relay.brevo.com:465; takes precedence over Resend |
RESEND_API_KEY | no | Alternative to SMTP_URL. With neither set, emails are printed to the log (dev only) |
EMAIL_FROM | no | From address for outbound email |
STRIPE_SECRET_KEY | no | Enables billing checkout and invoice payment links |
STRIPE_WEBHOOK_SECRET | no (required if STRIPE_SECRET_KEY is set) | Verifies /webhooks/stripe payloads |
STRIPE_PRICE_PRO / STRIPE_PRICE_TEAM | no | Price IDs for the paid plans |
STRIPE_CONNECT_FEE_BPS | no (default 0) | Optional platform fee, in basis points, on Connect payment links |
PRODUCT_NAME | no (default Tallied) | Used in emails, docs pages, and MCP server metadata |
SUPPORT_EMAIL | no (default support@localhost) | Shown in docs and consent screens |
See .env.example for the same list with inline comments.
@modelcontextprotocol/sdk router (mcpAuthRouter) provides the protocol surface: dynamic client registration, PKCE (S256), a form-encoded token endpoint, and RFC 8414 + RFC 9728 discovery metadata. src/http/app.ts mounts it at AUTH_ISSUER_URL and wires it to TallyOAuthProvider (src/auth/provider.ts), which persists clients, codes, and tokens in Postgres.src/auth/routes.ts.TallyOAuthProvider, replace it with the SDK's ProxyOAuthServerProvider, which delegates the same protocol surface to an upstream authorization server.Tallied runs on any host that gives you a stable HTTPS origin — Fly.io, Railway, Render, or similar.
BASE_URL to your public origin. Set MCP_URL, AUTH_ISSUER_URL, and/or APP_URL only if you're splitting those surfaces across subdomains.npm run build (runs build:app then tsc), then npm start.DATABASE_URL and run npm run db:migrate.${BASE_URL}/webhooks/stripe subscribed to checkout.session.completed, payment_intent.succeeded, customer.subscription.updated, and customer.subscription.deleted.${BASE_URL}/oauth/google/callback as an authorized redirect URI in the Google OAuth client.npm test — unit tests (vitest).test/golden-prompts.json — a hand-curated set of prompts and expected tool-call behavior. It's run manually, in both Claude and ChatGPT, before any change to tool names, descriptions, or input schemas — those are effectively a public API for the model and regressions there don't show up in unit tests.Before submitting to a connector directory, see docs/listing.md for store-listing copy and screenshots, and the product spec's submission checklist for the full requirements. Note that Claude's connector directory requires the submitting organization to be on a Team (or Enterprise) plan.