Work Journal MCP Server
Work Journal MCP Server
チームのメンバーなら誰でも、Simplified HR の Work Journal を Claude 経由で読めるホスト型 MCP サーバーです。自分のエントリは常に、同僚のエントリは既存の Work Journal 権限で許可されている範囲で読めます。
読み取り専用です。ここにあるツールでエントリを作成・変更・削除することはできません。
接続方法(任意の Claude クライアントから)
どのクライアントでも同じ流れです。URL でサーバーを追加し、開いたブラウザウィンドウでサインインします。
Claude Desktop または claude.ai — 設定 → コネクタ → カスタムコネクタを追加 →
https://wj-mcp.dev.besimplified.net/mcpClaude Code
claude mcp add work-journal --transport http https://wj-mcp.dev.besimplified.net/mcpどちらの場合もブラウザウィンドウが開きます。Simplified HR のメールアドレスとパスワードでサインインします。開発環境ではワークスペースも入力します(例: development-hr.dev.besimplified.net)。
アカウントサービスが初めて見るデバイスの場合、メールまたは SMS で確認コードが送信されます。一度入力すれば、同じクライアントから再度求められることはありません。
パスワードが Claude に届くことはなく、このサーバーが保存することもありません。
代わりにアカウントサービスでサインインする場合
WJ_LOGIN_MODE=redirect は上記のフォームを置き換えます。/authorize はブラウザを環境のアカウントサインインページに送り、メンバーはそこでサインインし、アカウントサービスは /identifier に短命のハンドオフトークン付きで戻します。このサーバーはそのトークンをセッションと交換します。これにより、パスワードがこのサーバーがレンダリングするページに入力されることはなく、メンバーは同時に BeSimplified の Web アプリにもサインインします。セッションはアカウントサービスが自らのオリジンで発行したものだからです。
フォームモードにはない前提条件があるため、デフォルトではオフになっています。
アカウントサービスの
app_registrationsレコード — このサーバーのホストを、検証済みのfqdnまたはworkspaceとして、利用するすべての組織に登録します。サインインページは渡されたreferrerからホストを取り出して検索します。レコードがないとvalid_workspace: falseと応答し、ブラウザはここではなく HR アプリに戻されます。これはアカウントサービスのデータベース内のレコードであり、コードの変更はありません。WJ_PUBLIC_BASE_URLを https かつポートなしにする — アカウントサービスはコールバックをホスト名のみからhttps://<host>/identifierとして再構築するため、ポートや平文スキームでは受信できません。そうでない場合、サーバーは起動を拒否し、開始しても完了しないログインを提供しません。アカウントセッションストアへの読み取りアクセス —
WJ_REDIS_HOSTとWJ_ACC_CACHE_PREFIX。ハンドオフトークンはそこにあるキーを指します。それがなければトークンと交換するものはありません。
コールバックホストはどちらのモードでも許可リストでチェックされます。ここではより重要です。メンバーがアカウントサービスで認証すると、redirect_uri を指定した者が認証コードを受け取ります。PKCE はフローを開始した攻撃者には役立ちません。
Related MCP server: zulip-mcp
ツール
work_journal_get_entries
日付または最大 31 日間の範囲について、完全なタスク詳細付きのエントリを取得します。
パラメータ | 備考 |
| 単日、 |
| 包括範囲。 |
| 任意。下のエイリアス表を参照。省略時は全タイプ |
| 任意。 |
| 任意。デフォルト |
質問例: 「先週の EOD エントリを見せて」
work_journal_get_day
1 日分を完全に取得します。すべてのタスク(メモと添付ファイル付き)、通知先、ETA、提出時刻を含みます。
パラメータ | 備考 |
| 必須、 |
| 任意。1 つのエントリタイプに絞る |
| 任意。別メンバーの ID |
質問例: 「8月4日に何を記録した?」
work_journal_get_summary
任意の期間について、タイプとステータスごとの件数を日別詳細なしで返します。31 日を超える期間にはこれを使用します。
パラメータ | 備考 |
| 包括範囲 |
| 暦年全体。明示的な範囲がない場合に使用 |
| 任意 |
| 任意。別メンバーの ID |
質問例: 「今年、EOW レポートを何回逃した?」
work_journal_find_member
名前またはメールアドレスの一部から同僚を検索し、そのメンバー ID を返します。上記ツールの member として使用します。
パラメータ | 備考 |
| 名前またはメールの一部。少なくとも 2 文字 |
質問例: 「Rahul のメンバー ID を探して」
work_journal_get_team_report
期間について、メンバーごとに提出済み・保留中・未提出の件数を 1 行で返します。
パラメータ | 備考 |
| 必須、包括範囲 |
| 任意。デフォルトは EOD |
| 任意のチーム ID、またはリテラル |
| 任意: |
| 任意。1 人のメンバーに絞る |
| 任意。デフォルト 15 行、最大 50 |
質問例: 「先週 EOD を逃したのは誰?」
タイプエイリアス
言い換え可能な表現 | 解決先 | 表示 |
|
|
|
|
|
|
|
|
|
|
|
|
マッチングは大文字小文字を無視し、スペース、ハイフン、アンダースコアを同等に扱います。
誰が誰のジャーナルを読めるか
このサーバーは独自の権限を強制しません。すべてのリクエストはあなた自身の Simplified HR セッションを運び、Work Journal API は Web UI とまったく同じ権限を適用します。
インスタンス権限 — 自社の任意のメンバーを読めます
グループ権限 — 自分のレポートサブツリー内のメンバーを読めます
どちらもない — 自分のジャーナルだけを読め、他のメンバーへの試みは拒否されます
同僚のエントリを読む際に知っておくべきことが 2 つあります。リクエストが完全に拒否される可能性があること、管理者ビューでは下書き・予定・非公開エントリが除外されることです。したがって、エントリがないことは何も記録されていないことを証明しません。
制限
work_journal_get_entriesは 31 日を超える範囲を拒否し、work_journal_get_summaryを案内しますツール呼び出しごとに最大 4 つのリクエストが並行して実行されるため、広い範囲でも API に優しいです
「先週」などの相対日付は呼び出し前に Claude が解決します。ツールは
YYYY-MM-DDのみ受け付けます
ローカルでの実行
npm install
cp .env.example .env # then fill in the two secrets
WJ_ENV=dev \
WJ_PUBLIC_BASE_URL=http://localhost:8080 \
WJ_TOKEN_KEY=$(openssl rand -hex 32) \
WJ_FINGERPRINT_SECRET=$(openssl rand -hex 32) \
npm startGET /healthz は {"status":"ok"} と応答するはずです。環境変数なしで node src/index.js を実行すると、不足している変数をすべて列挙して即座に終了する必要があります。
環境変数
変数 | 必須 | 目的 |
| はい | ホストのプリセットを選択: |
| はい | 外部から到達可能なオリジン。OAuth ディスカバリードキュメントに公開されます |
| はい | 64 桁の 16 進文字。セッションエンベロープを暗号化します |
| はい | 32 文字以上。各メンバーのデバイスフィンガープリントを導出します |
| いいえ |
|
| いいえ | プリセットと異なる場合のアカウントサービスのオリジン |
| いいえ、デフォルト | リッスンポート |
| いいえ、デフォルト | リクエストごとのタイムアウト |
| いいえ |
|
| いいえ、デフォルト |
|
|
| アカウントセッションストア |
| いいえ、デフォルト | |
| いいえ |
|
| いいえ | 接続先ホストと異なる場合、Redis 証明書が発行された名前 |
| いいえ |
|
|
| アカウントサービス自身の |
WJ_FINGERPRINT_SECRET はすべてのタスクで同一でなければならず、軽率にローテーションしてはいけません。 各メンバーの安定したデバイスフィンガープリントを導出します。変更すると、チーム全体が確認コードで再チャレンジされます。
デプロイに関する注意
/authorizeでの Cookie スティッキネスはWJ_LOGIN_MODE=formの場合のみ必要です。redirectモードでは、2つのレッグ間でプロセスメモリに保持されるものはありません。認可リクエストは暗号化されたredirect_pageトークンとしてアカウントサービスから戻ってくるため、/authorizeと/identifierはどちらもステートレスで、スティッキネスは不要です。Cookie スティッキネスは
/authorizeでのみ必要です。OTP 送信はログインを開始したタスクに到達する必要があります。進行中のログインはそのプロセスのメモリに5分間保持されるためです。/mcpと/tokenはステートレスであり、スティッキーにしてはいけません。両方のシークレットは SSM Parameter Store の
SecureStringとして、タスク定義のsecretsブロックから参照されるべきです — 環境リテラルとしては決して使用しないでください。初回デプロイ前に環境ごとに一度だけ作成してください。プラットフォームの他の何も/hr/work-journal-mcp/プレフィックスを使用しないため、既に存在することはありません:aws ssm put-parameter --type SecureString --name /hr/work-journal-mcp/<env>/token_key --value "$(openssl rand -hex 32)" aws ssm put-parameter --type SecureString --name /hr/work-journal-mcp/<env>/fingerprint_secret --value "$(openssl rand -hex 32)"ecsTaskExecutionRoleには両方に対するssm:GetParametersとkms:Decryptが必要です。そうでない場合、このコードが実行される前に、タスクはResourceInitializationErrorで起動時に失敗します。本番環境は dev で必要な
workspaceログインフィールドを拒否するため、ログインページは dev 以外ではそれを非表示にします。
セキュリティ
パスワードは決して保存されず、ログにも記録されず、いかなる形式でもブラウザに返されることはありません。パスワードはログインに要する数秒間のみメモリ内に存在します。
セッション状態は、このサーバーのみが開封できる AES-256-GCM 暗号化エンベロープで送信されます。Simplified HR JWT が Claude やモデルに届くことはありません。
アクセス、リフレッシュ、認可コードのエンベロープはそれぞれの種類に暗号的にバインドされているため、別の種類として使用することはできません。
ログイン試行はメールアドレスごとにレート制限されます。
すべてのツール呼び出しは、呼び出し元、ツール、およびジャーナルが読み取られたメンバーとともにログに記録されるため、メンバーをまたいだ読み取りは監査可能です。トークンとエントリの内容がログに記録されることはありません。
テスト
npm testThis server cannot be deployed
Maintenance
Related MCP Connectors
- mcp-serverOAuthio.klokin
MCP server exposing klokin time-tracking operations (employees, time entries, stores) to AI clients.
Read-only MCP server for ClassQuill, a tutoring-business-management platform.
Read-only MCP server for interior design studios: projects, overviews, weekly activity. No writes.
The HubSpot MCP Server acts as a bridge that enables AI assistants and Large Language Models to securely interact with HubSpot CRM data through natural conversation, without requiring users to understand complex API structures. It provides read-only access to standard CRM objects (contacts, companies, deals, tickets, products, invoices, and more) and their associations, secured via OAuth 2.0, allowing AI agents to perform tasks like summarizing deals, fetching company updates, and looking up record changes.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceRead-only MCP server that proxies deepHR's API to MCP clients, enabling interaction with deepHR modules such as payroll and employees through natural language.-
- AlicenseAqualityDmaintenanceA read-only MCP server that allows Claude Code to securely access Zulip chat messages, streams, topics, and user information without modification capabilities.9MIT
- AlicenseNot gradedqualityAmaintenanceA read-only MCP server that gives Claude safe access to Kubernetes clusters, enabling listing, describing, and monitoring resources without mutation risks and with secret masking.1MIT
- FlicenseNot gradedqualityCmaintenanceA local MCP server that reads logged hours from an internal time tracker, providing tools to list time entries, projects, and the active timer. It is read-only, enabling Claude Code to see time-tracking data without writing.-