time-tracker-timesheet-billable-hours について
time-tracker-timesheet-billable-hoursは、AIチャットで請求対象の作業時間を記録するフリーランスやチーム向けのMCPサーバーです。タイマー、作業記録、料金、レポート、請求明細を備え、データはJSON形式でローカルに保存します。
主な機能
- 01プロジェクトタイマーの開始と停止
- 02作業記録の追加・編集・一覧表示
- 03時間単価と通貨の設定
- 04プロジェクト・タスク・日・タグ別のレポート
- 05CSVエクスポートと請求明細の作成
- 06請求済み記録のマーク
活用シーン
- 01AIチャット中に請求対象時間を記録
- 02タイマーを忘れた作業時間の後入力
- 03期間ごとのプロジェクト時間と金額の確認
- 04請求明細の作成と二重請求の防止
MCP 対応
タイマーと作業時間管理のツールに加え、`timetracker://today`リソースと`daily_standup`プロンプトをMCPクライアントに公開します。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://mcp.zovo.one/mcp/time-trackerclaude mcp add --transport http theluckystrike-time-tracker-timesheet-billable-hours https://mcp.zovo.one/mcp/time-tracker{"mcpServers":{"theluckystrike-time-tracker-timesheet-billable-hours":{"type":"http","url":"https://mcp.zovo.one/mcp/time-tracker"}}}Cursor で開く{"servers":{"theluckystrike-time-tracker-timesheet-billable-hours":{"type":"http","url":"https://mcp.zovo.one/mcp/time-tracker"}}}VS Code で開く{"mcpServers":{"theluckystrike-time-tracker-timesheet-billable-hours":{"type":"http","url":"https://mcp.zovo.one/mcp/time-tracker"}}}{"mcpServers":{"theluckystrike-time-tracker-timesheet-billable-hours":{"serverUrl":"https://mcp.zovo.one/mcp/time-tracker"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
https://mcp.zovo.one/mcp/time-tracker認証が必要ツール
20このツールにパラメーターはありません。
詳細
Claude から時間を記録できる、無料・インストール不要のサーバー
Awesome MCP Servers で紹介 - ディレクトリ掲載ページ | 稼働中のホスト型エンドポイント、無料プラン、登録不要です。
AI チャットから離れずに請求対象の時間を記録できます。「acme redesign のタイマーを開始して」と伝えて作業を続け、「今週のプロジェクト別の作業時間」や「8 月の acme の請求書明細」を尋ねてください。タイマーを継続して記録し、記録し忘れた時間を追加したり、プロジェクトごとの時給を適用したりできます。また、結果をレポート、CSV ファイル、または請求書の明細項目に変換できます。すべてのデータは、お使いのマシンにプレーンな JSON として保存されます。
theluckystrike が開発しました。
公式 MCP Registry に登録されています(io.github.theluckystrike/time-tracker-timesheet-billable-hours)。
AI Product Index に掲載されています - mcp.zovo.one/s/time-tracker で利用できるリモートエンドポイント。無料プラン、登録不要です。
![]()
チャットから請求対象の時間を記録し、設定不要ですぐにレポートや請求書の明細項目に変換できます。すべてローカルで処理されます。
60 秒でインストール
@theluckystrike/mcp-time-tracker の npm への公開は保留中です。それまでは、以下で動作確認済みのワンクリック .mcpb バンドル、またはクローンしてビルドする方法をお使いください。
ワンクリック(.mcpb):最新リリースから time-tracker.mcpb をダウンロードし、Claude Desktop でダブルクリックしてください。
https://github.com/theluckystrike/mcp-servers/releases/latest
(claude_desktop_config.json):
{
"mcpServers": {
"time-tracker": {
"command": "npx",
"args": ["-y", "@theluckystrike/mcp-time-tracker"]
}
}
}
Claude Code:
claude mcp add time-tracker -- npx -y @theluckystrike/mcp-time-tracker
(.cursor/mcp.json):
{
"mcpServers": {
"time-tracker": {
"command": "npx",
"args": ["-y", "@theluckystrike/mcp-time-tracker"]
}
}
}
上記の npx 形式は、パッケージの公開後すぐに使用できるようになります。それまでは、上記の .mcpb バンドルを使用するか、以下の 3 つのコマンドだけでソースからビルドしてください。
git clone https://github.com/theluckystrike/mcp-servers.git && cd mcp-servers
npm install
npm run build -w packages/mcp-license -w servers/time-tracker
その後、クライアントの command に node を指定し、引数を 1 つ設定してください。引数には servers/time-tracker/dist/index.js の絶対パスを指定します。
Pro モードで実行するには、同じ設定ブロックに MCP_LICENSE_KEY を設定するか、キーを使って license_activate を一度呼び出してください。
ツール
| ツール | 機能 |
|---|---|
timer_start | プロジェクトのタイマーを開始します(タスク、タグ、レート、通貨は任意です)。新しいタイマーを開始すると、前のタイマーは停止して記録されます。既存のプロジェクトが1つだけ完全一致する部分的なプロジェクト名は、そのプロジェクト名として使用されます。 |
timer_stop | 実行中のタイマーを停止し、記録を作成して、所要時間を返します。 |
timer_status | 実行中のタイマー、経過時間、今日の合計時間を表示します。 |
entry_add | すでに作業した時間を記録します(開始時刻と終了時刻、または分数を指定)。レートと通貨は任意です。レートに「1時間あたり90ユーロ」を指定すると、2.5時間分として225.00 EURが請求されます。部分的なプロジェクト名は timer_start と同様に解決されます。 |
entry_list | 日付範囲とプロジェクトで絞り込んだ、記録の簡潔な表を表示します。 |
entry_edit | 記録の任意のフィールドを変更します。 |
entry_delete | IDを指定して記録を削除します。 |
project_set_rate | 金額の合計に使用する時間単価と通貨を設定します(通貨にはコードまたは単語を指定できます:EUR、euros、pounds、zl)。apply_to_existing: true を指定すると、そのプロジェクトですでに記録された時間のレートも再計算します。レートが未設定の記録だけを対象にするには、only_missing: true を追加します。 |
report | 期間の時間数と金額を、プロジェクト、日、タスク、タグごとにグループ化して表示します。通貨ごとの単純な合計を表示するには group_by を省略します。表、JSON、CSVに対応しています。請求済みの時間は除外されます。タイムシート全体を表示するには unbilled_only: false を指定します。 |
export_csv | 記録をCSVファイルに出力し、ファイルパスを返します。 |
invoice_summary | 1つのプロジェクトについて、請求書に使える明細項目(時間数、レート、金額、合計)を、作業時間を記録した通貨で返します。タスクとレートごとに1行となるため、誰も合意していない混合レートが明細に表示されることはありません。各明細の元となる entry_ids を返し、請求済みの時間は除外します(unbilled_only: false を指定すると含めます)。直近7日間は無料で、Proでは全履歴から任意の期間を指定できます。 |
entry_mark_billed | 請求書に記載した時間に請求書番号を記録します(invoice_summary の ids、または project + from + to を指定)。これにより report と invoice_summary で対象時間が再び提示されなくなり、同じ時間を二重請求することもありません。 |
license_status | FreeまたはProの状態と、アップグレード方法を表示します。 |
license_activate | Proキーを有効化します(オフラインで検証されます)。 |
また、リソース timetracker://today(今日の概要)とプロンプト daily_standup
(昨日と今日に記録した時間からスタンドアップ用の更新内容を作成)も公開されています。
どのように頼めるか
ツール名を指定する必要はありません。以下はサーバーに対して実際にテストされた文で、ツール 列には応答したツールを示しています。
| 依頼の例 | ツール |
|---|---|
| 「Acmeのウェブサイトプロジェクトのタイマーを開始して。」 | timer_start |
| 「タイマーを停止して、作業時間を教えて。」 | timer_stop |
| 「今、何のタイマーが動いていて、どれくらい経った?」 | timer_status |
| 「昨日、Acmeのデザインレビューを2.5時間、1時間あたり90ユーロで記録して。」 | entry_add |
| 「今週のAcmeの記録を表示して。」 | entry_list |
| 「最後の記録のタスク名を、デザインレビューではなくAPIのリファクタリングにして。」 | entry_edit |
| 「重複して記録した項目を削除して。」 | entry_delete |
| 「Acmeのレートを1時間あたり90 EURに設定して。」 | project_set_rate |
| 「今月、プロジェクトごとに集計すると、請求した時間は何時間?」 | report |
| 「8月分のAcmeの請求明細を作成して。」 | invoice_summary |
| 「この時間をINV-2026-0001として請求しました。」 | entry_mark_billed |
ほかに知っておくと便利な依頼が2つあります:「経理担当者向けに作業時間をCSVにエクスポートして」(export_csv)と、「昨日と今日の内容からスタンドアップ用の更新を書いて」(daily_standup プロンプト)です。
使用例
これは docs/USER_VALUE_R2.md の監査からの実際の記録で、数値は変更していません。
You: Log 2.5 hours yesterday for Acme, design review, at 90 euros an hour.
entry_add { project: "Acme", ... }
-> "Acme" resolved to the existing project "Acme website"
-> rate "90 euros an hour" parsed as EUR 90.00/h
Assistant: Logged 2.50 h for Acme website - design review at EUR 90.00/h = EUR 225.00.
You: How much do I bill Acme this week? Give me invoice lines.
invoice_summary { project: "Acme website", from: "2026-08-31", to: "2026-09-02" }
Assistant: Invoice summary - Acme website
design review 2.50 h EUR 90.00/h EUR 225.00
TOTAL 2.50 h EUR 225.00
それぞれ1回の呼び出しです。レートには通貨が最後まで引き継がれます。レポートに「225」のように通貨のない数値が表示されたり、誤って「$225」になったりすることはありません。
2つ目の使用例は、週次レポートと daily_standup プロンプトです。
You: How many hours did I put into Acme this week, grouped by task?
report { project: "Acme website", from: "2026-08-27", to: "2026-09-02", group_by: "task" }
Assistant: Acme website, 2026-08-27 to 2026-09-02
design review 2.50 h EUR 225.00
TOTAL 2.50 h EUR 225.00
You: Write my standup update.
(prompt) daily_standup
Assistant: Yesterday: 2.50 h on Acme website (design review).
Today: nothing logged yet.
請求済み時間の締め処理
請求書を発行した時間は処理済みになります。entry_mark_billed {ids, invoice_number} は該当するエントリに
billed_at と billed_invoice を書き込みます。それ以降、report と invoice_summary はデフォルトで
それらを除外するため、翌月に「Acme に請求する」ときに、支払い済みの作業へ再度請求することはありません。
タイムシート全体はそのまま残っています。対象のいずれかに unbilled_only: false を渡してください。
invoice_summary は使用した entry_ids を返すため、請求書ができたら、そのまま entry_mark_billed
に渡せます。
report と invoice_summary は、意図的に重複する質問に答えます。report は「時間と金額」を好きな方法で
グループ化して確認するためのものです。invoice_summary は「請求書に記載できる明細を取得する」ためのもので、
同じエントリを対象とした、特定のプロジェクト向けの、請求書形式に沿ったより限定的なビューです。
データの保存方法
エントリ、プロジェクト、料金は、1 つの JSON ファイルに保存されます。
${XDG_DATA_HOME:-~/.local/share}/mcp-servers/time-tracker/data.json。
タイマーの開始・停止、エントリの追加・編集・削除、料金の設定など、すべての書き込みはアドバイザリロック
ファイル .../time-tracker/.lock を取得して行われます。このロックは、読み込みから変更、保存までの一連の処理全体で保持されるため、
重複する 2 つの呼び出しが同時に処理され、ファイルを破損させることはありません。保存時は一時ファイルに書き込んでから、
所定の場所へ名前を変更します。そのため、書き込み中にクラッシュしたりプロセスが強制終了したりしても、ファイルは
古い状態か新しい状態のどちらかになり、書き込み途中の状態にはなりません。読み取り(entry_list、report、
timer_status、export_csv)ではロックを取得しません。
データをバックアップするには、単一の data.json ファイルをコピーしてください(.lock が存在する場合はそれもコピーできますが、
データは含まれていません)。データベースはなく、隠れた 2 つ目のファイルもありません。
data.json が読み取れない、または有効な JSON ではない場合、サーバーはそれを「まだデータがない」として扱いません。
ファイルをバイト単位でそのまま data.json.corrupt-<timestamp> として退避し、data.json.corrupt マーカーを作成します。
その後、読み取りを含むすべてのツールは data file is corrupt; moved to ...; nothing was written を返します。正常な data.json(退避したコピーはすぐそこにあります)を復元し、マーカーファイルを削除すれば、
処理を再開できます。その間、何も上書きされません。
日付、時刻、料金
- オフセットのないタイムスタンプはローカル時間です。
2026-09-02T09:00:00は、UTC ではなく、お使いの地域の09:00を意味します。明示的なオフセット(2026-09-02T09:00:00+02:00)または末尾のZを指定すると、その値がそのまま適用されます。 - 日付のみの範囲指定は、ローカル時間の1日全体を対象にします。
from: "2026-09-01"は1日のローカル時間00:00:00、to: "2026-09-30"は30日のローカル時間23:59:59.999を意味するため、日付で指定した月には最終日も含まれます。時刻を含むタイムスタンプは、指定されたとおりに使用されます。 - 記録は指定期間内の部分だけが対象になります。
fromより前に開始した記録や、toより後に終了する記録は、全体でも対象外でもなく、期間内に該当する部分が集計されます。 - 日別のグループ化では、記録はローカル時間の午前0時で分割されます。 23:30から01:30までの作業は、最初の日に0.5時間、翌日に1.5時間として集計されます。月をまたぐ場合も同様です。
timer_statusでは、今日の午前0時以降に該当する記録または実行中のタイマーの部分だけが集計されます。 - 料金文字列は推測せず、解析されます。
"1,200 USD"は1200(カンマの後に数字がちょうど3桁続く場合は桁区切り)、"12,50 EUR"は12.50(明確なヨーロッパ式の小数表記)、"1.200,50"は1200.50として扱われます。"1,2345"のように複数の解釈が可能な値は、誤った数値として読み取る代わりに、計算例を示して拒否されます。 - 料金は時間の記録時に保存されます。
entry_addとtimer_stopは、有効な時間単価と通貨を記録に保存し、レポートと請求書ではその保存済み料金を使用します。そのため、project_set_rateは今後の記録にのみ適用されます。プロジェクトですでに記録済みの時間に新しい料金を適用するには、apply_to_existing: trueを指定してください。これにより、そのプロジェクトのすべての記録が再設定されます。すでに料金が設定されている記録も対象となり、変更された件数とプロジェクトの新しい合計が応答に表示されます。独自の料金が保存されていない記録だけを対象にするには、only_missing: trueを追加してください。 - タグ行は重複します。
group_by: "tag"では、devとmeetingのタグが付いた記録は両方の行に表示されます。合計は記録を一度だけ使って算出されるため、各行の合計を足した値にはなりません。
制限事項と注意点
- 無料版の
entry_list、report、export_csv、invoice_summaryで参照できるのは直近7日間のみです。タイマーと記録そのものに制限はなく、削除されることもありません。制限されるのは、無料版の呼び出しで読み取れる期間だけです。 - 無料版では2つのプロジェクトに時間単価を設定できます。3つ目のプロジェクトに料金を設定するにはProが必要です。
reportのすべてのグループ化は無料です。タグによるグループ化も含まれます。タグの合計に関する修正は正確性の改善であり、プレミアム機能ではありません。group_byは省略可能で、省略すると通貨ごとの単純な合計が表示されます。- 同時に実行できるタイマーは1つだけです。2つ目のタイマーを開始すると、最初のタイマーは停止して記録されます。同時に複数のタイマーを実行することはできません。
- リマインダーやアイドル検出機能はありません。タイマーの停止を忘れると、停止するか別のタイマーを開始するまで実行され続けます。
トラブルシューティング
npxが応答しない、またはパッケージが見つからない:このパッケージのnpm公開は保留中です。公開されるまでは、上記の.mcpbバンドルまたはクローンしてビルドする方法を使用してください。.mcpbバンドルを使用する場合:Claude Desktopに直接インストールされるため、別途パスを設定する必要はありません。- クローンする方法を使用する場合:
npm run buildの実行後、サーバーのバイナリはservers/time-tracker/dist/index.jsにあります。クライアントのcommandをnodeに設定し、その絶対パスだけを引数として指定してください。 - Nodeのバージョン:Node >= 18が必要です。
node -vで確認してください。 - 何も表示されない/エラーが表示されずに失敗する:このサーバーはログをstderrにのみ出力し、stdoutには出力しません(stdoutはMCPプロトコル用に確保されています)。Claude Desktopでは、「Settings」->「Developer」-> サーバーのログファイルを確認してください。Claude Codeでは、
--mcp-debugを指定して実行するか、起動元のターミナルを確認してください。 - Proキーが認識されない:
license_statusを実行して、サーバーが認識しているプランを確認し、クライアントが起動する同じプロセスでMCP_LICENSE_KEYが設定されていることを確認してください(シェルで設定されているだけでは不十分です)。
プライバシー
すべてのデータはローカルに保存されます。エントリーは ${XDG_DATA_HOME:-~/.local/share}/mcp-servers/time-tracker/data.json に保存されます。
サーバーはネットワークリクエストを一切送信せず、テレメトリーもなく、アカウントも必要ありません。ライセンスキーは Ed25519 署名で、パッケージに組み込まれた公開鍵を使ってオフラインで検証されるため、インターネット接続がなくても有効化できます。
連携先
- mcp-invoice:
invoice_summaryの出力をそのまま番号付き PDF 請求書に変換します。 - mcp-spreadsheet:
export_csvで CSV をエクスポートし、クエリや再構成を行います。 - mcp-price-tracker:クライアント向けに購入するものもある場合は、その価格を追跡できます。
- office-suite:1 回のインストールと 1 つの設定項目で、すべての関連サーバーを利用できます。
- ガイド:Claude Code と Cursor で請求対象の時間を記録する
よくある質問
はい。3 つとも同じ設定形式で stdio 経由の MCP に対応しており、クライアントにかかわらず、ツールとデータファイルは同一です。
何も削除されません。エントリーは data.json に残り続けます。Pro を有効にして全履歴にアクセスできるようになるまでは、entry_list、report、export_csv、invoice_summary の結果に表示されないだけです。
はい。通貨はプロジェクトごとに設定し(またはエントリーごとに設定してプロジェクトのデフォルトを上書きし)、合計はすべて通貨別に集計されます。レポートで EUR と USD が合算されることはありません。
サーバーは時間の重複をブロックせず、指定された内容を記録します。entry_edit を使えば、後から間違いを修正できます。
いいえ。このサーバーは、ローカルの公開鍵で検証されるライセンスの有効化も含め、ネットワーク呼び出しを一切行いません。
ライセンス
MIT
スイート全体で 1 つのビジネスプロフィール
本人情報は ${XDG_DATA_HOME:-~/.local/share}/mcp-servers/profile/business.json に一度だけ保存され、スイート内のすべてのサーバーがこれを読み込みます。請求書の発行者、docx のレターヘッド、定期発行者、expense-tracker のデフォルト VAT 税率、time-tracker と timezone のホームゾーン、履歴書と契約書のレターヘッドに使用されます。business_set(invoice または docx)で一度設定すれば、ほかの場所で繰り返し設定する必要はありません。メールアドレスは、このプロフィールまたは明示的な引数からのみ取得されます。保存されていない場合、書類には [add: email] と表示され、ツールもその旨を伝えるため、誰かが勝手にアドレスを補うことはありません。
よくある質問
無料の MCP 時間追跡サーバーはありますか?
はい。mcp.zovo.one の time-tracker サーバーは、インストール不要の無料 MCP 時間追跡サーバーです。チャットでタイマーを開始・停止し、クライアントごとの合計時間を記録して、週次レポートを作成できます。WebWork や TrackingTime のような SaaS トラッカーとは異なり、アカウントは不要です。ホストされた URL を貼り付ければすぐに使えます。
Claude で時間を記録するにはどうすればよいですか?
https://mcp.zovo.one/mcp/time-tracker(mcp.zovo.one/mcp/connect のトークン付き URL)に接続し、「Acme プロジェクトのタイマーを開始して」と伝えます。同じように後で停止できます。週次の概要も簡単に確認できます。
これらのドキュメントを MCP サーバーとして使う
あらゆる MCP クライアント(Claude、Cursor、Windsurf、VS Code)から、インストール不要で GitMCP 経由でこのリポジトリのドキュメントを直接読み取れます。
- Docs MCP URL:https://gitmcp.io/theluckystrike/mcp-time-tracker
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。