AimYear

io.github.Yahhi由 GitHub 帳號 Yahhi 發布v0.12.1更新於 Nov 8, 2026

Accountability partner in your agent: one yearly aim, one main step a day, a timer your agent runs.

已驗證Streamable HTTP可網頁執行效率與工作流資料與分析

概覽

AI 產生的概覽

AimYear 是遠端問責服務,讓助理維護一個年度目標、規劃每日主步驟、執行計時器並回顧時間去向。

可以做什麼
  • 設定並檢核年度目標、槓桿與其他專案,記錄進度數值
  • 建立里程碑與具體步驟的路徑,列出下一步待辦步驟
  • 規劃每日計畫與例行事項,編輯或刪除計畫項目,設定當日追蹤模式
  • 開始、停止、分配注意力、補登、修改與刪除工作工作階段,找出未計時的空檔
  • 回顧單日、單週與時間漏洞,讀取時區、提醒去向等設定
適用情境
適合有一個年度大目標、卻總是把真正推動目標的事往後延的人,例如希望助理規劃每日主步驟、記錄工作時段並提供每週平衡報告的獨立開發者。也適合由助理而非使用者主導規劃與追蹤的工作方式。
執行需求
遠端 Streamable HTTP 端點 mcp.aimyear.com/mcp,無需安裝。以 OAuth 2.1 透過 Google、Apple 或電子郵件登入,訪客帳號無法連線。ChatGPT 需付費方案並開啟開發者模式;其他 MCP 用戶端需支援帶 OAuth 的遠端 HTTP 伺服器。
安裝前請注意
伺服器會把目標、計畫、工作階段與摘要存入 Google Cloud Firestore,並與 AimYear 應用程式共用同一帳號。工具會寫入、整批取代與刪除目標、計畫、工作階段與例行事項,助理出錯會改動已記錄的歷史。Pro 功能需付費(每年 49 美元或每月 8 美元)。刪除帳號與資料需以電子郵件申請。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 AimYear,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/io.github.Yahhi%2Faimyear-mcp/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "aimyear": {
      "type": "http",
      "url": "https://mcp.aimyear.com/mcp"
    }
  }
}

README

AimYear MCP server

An accountability partner inside the AI agent you already use. Connect AimYear to Claude, Claude Code, ChatGPT or any MCP client, and your agent keeps one big aim for your year, plans one main step a day toward it, runs the timer while you work and writes down what actually got done. When you start comfortable work while the main step is still open, it asks you to do the step first.

Built for indie developers and makers who build all day but keep postponing the work that moves the goal: selling, talking to users, publishing.

  • Free: sign-in on any number of devices, aims, plans, routines, time tracking and reviews through your own agent. No AI runs on AimYear's side, so there are no AI costs.
  • Pro ($49/year or $8/month, with the coming phone app): notifications, reviews written by AimYear, AimYear's own AI coach and Google Calendar sync.

Website: aimyear.com · Setup guide: aimyear.com/connect.html · Privacy: aimyear.com/privacy.html · Contact: [email protected]

Connect (about a minute)

Endpoint: https://mcp.aimyear.com/mcp (Streamable HTTP, OAuth sign-in with Google, Apple or email). Nothing to install.

  • Claude (web, desktop, mobile): Settings → Connectors → Add custom connector → paste the endpoint → Connect, then sign in.
  • Claude Code: claude mcp add --transport http aimyear https://mcp.aimyear.com/mcp, then /mcp → aimyear → Authenticate.
  • ChatGPT (paid plans, developer mode): Settings → Apps & Connectors → Advanced settings → turn on Developer mode. Then Apps & Connectors → Create: name AimYear, URL the endpoint above, authentication OAuth → Create, then sign in.
  • Other MCP clients: add the endpoint as a remote (HTTP) server with OAuth.

Then say: "Help me set my aim for this year". The agent checks that the aim is countable, builds the path of stages, and from then on: "plan my day", "start the timer", "how was my week?".

The skill that teaches an agent the method is in skills/aim/SKILL.md.

What happens to your data

The server stores what your agent saves through the tools (aim, path, plans, sessions and their summaries) in Google Cloud Firestore. Your conversation stays with your agent's provider; AimYear only receives the tool calls. Logs keep the tool name, success and timing, never argument values. To delete your account and data, email [email protected]. Details: privacy policy.

Tools (43)

Names say what a tool does: get_ reads one thing, list_ reads several, find_ looks for problems, set_ replaces a whole list, add_ / edit_ / delete_ change one entry.

GroupTools
Aimget_goal, check_goal_draft, set_goal, record_progress, set_levers, set_projects
Pathget_path, set_milestones, edit_milestone, add_steps, edit_step, delete_step, next_steps
Weekget_commitments, set_commitments, get_capacity
Dayget_planning_context, get_plan, set_plan, edit_plan_item, delete_plan_item, set_day_mode, get_routines, set_routines
Timer and sessionsget_now, start_session, add_note, split_attention, stop_session, stop_timer, add_session, edit_session, delete_session, list_sessions, find_gaps
Reviewssummarize_day, summarize_week, find_leaks
Settings and devicesget_settings, set_settings, add_device, list_devices, delete_device

0.4.2 adds the hard-first check: set_plan warns when nothing in the day is on a hard lever, and add_steps / set_levers warn when a stage starts with preparation before the first hard-lever step. The server instructions tell every agent the same rule.

0.4.0 adds routines: small steps that repeat on fixed weekdays ("talk with one person on Reddit"). The server adds them to each matching day's plan, so every device and agent sees the same checks; get_now lists the open ones and summarize_week counts them.

0.3.0 renamed most tools (0.2.x names stop working) and added the editing tools: edit_session, delete_session for finished sessions, edit_milestone, delete_step, edit_plan_item, delete_plan_item, set_projects, and get_settings / set_settings with the timezone.

Protocol details

Stateless Streamable HTTP, POST only. Sign-in is OAuth 2.1 with PKCE and dynamic client registration. The sign-in page uses the same Firebase project as the AimYear app, so the app and every connected AI share one account and one history. Guest (anonymous) accounts cannot be connected. Every tool acts as one signed-in person; see docs/ACCESS.md.

Without a token, the server describes itself (initialize, tools/list, prompts/list, ping); everything else answers 401 with a WWW-Authenticate header pointing at /.well-known/oauth-protected-resource/mcp.

Retry-safe writes for apps (0.7)

The server is the source of truth, and a phone may deliver a request long after the tap, or twice. So stop_session, start_session, add_session, add_note, add_steps and delete_session take an optional op_id: an id the app mints before its first attempt and reuses on every retry. The write is applied once; a retry gets the first answer back and writes nothing. Applied ops live in users/{uid}/ops/{op_id} (tool, sessionId, result, at, expiresAt) and are written in the same Firestore transaction as the change they record. Give the ops collection a TTL policy on expiresAt (30 days) in the Firestore console.

stop_session takes end_at and start_session takes start_at (ISO 8601) so a stop queued offline at 14:05 and delivered at 16:40 records 14:05. start_session also takes the app's own session_id (create-if-absent). A request with op_id, end_at or start_at must name its session_id: the server never guesses which session a replay means. Without them, an agent's stop_session / delete_session acts only on its own connection's single running session, and otherwise lists the running sessions with ids.

Two devices can stop one session; the result is the same whatever order the stops arrive in: the earliest end wins (once anyone stopped it, it was not running), done wins over any other outcome, the first summary stays and a different later one goes to the notes. Every stop is kept in the session's stops[], and the answer says applied: ended | shortened | recorded.


The rest of this file is for working on the server itself. You don't need it to use AimYear.

How it is built

FileWhat it does
src/http.tsThe Express app: the MCP endpoint, the OAuth routes, the menu bar endpoints.
src/access.tsOne table: every MCP method, tool and route → public / auth / admin, with the reason. Every gate reads it.
src/oauth.tsOAuth storage in Firestore (codes and tokens stored as SHA-256 hashes) and the sign-in/consent page. The protocol itself is the MCP SDK's mcpAuthRouter.
src/calllog.tsOne structured log line per MCP call: method, tool, ok, error code, latency, user, client. Never argument values.
src/tools.tsTool registration, annotations (read-only / destructive / idempotent) and the server instructions.
src/service.ts, src/domain/The rules: goal rubric, classification, attention, plans, sessions.
src/surface.tsThe surface fingerprint behind surface.lock.json.
.githooks/pre-commitRegenerates docs/ACCESS.md from src/access.ts and stages it on every commit, so the committed table can't drift (npm ci points core.hooksPath at it through the prepare script; test/access.test.ts still fails on a stale file).

Data lives in Firestore under users/{uid}/aim/{goal,path,profile}, users/{uid}/days, users/{uid}/sessions, users/{uid}/blocks, users/{uid}/ops (applied op_ids, TTL on expiresAt); OAuth under oauth_clients, oauth_requests, oauth_codes, oauth_tokens; reminders in pending_notifications (claimed by a transactional delete before each push).

Run locally

bash
npm install && npm run build# stdio, one person:claude mcp add --scope user aimyear -e AIMYEAR_UID=<firebase uid> -- node $PWD/dist/index.js# HTTP:AIMYEAR_TOKENS="sometoken=<uid>" PORT=8787 node dist/index.js --http

Credentials: a Firebase admin service account at ~/.aimyear/service-account.json (or AIMYEAR_SERVICE_ACCOUNT=<path>; falls back to Application Default Credentials).

Env: AIMYEAR_UID (stdio), AIMYEAR_TOKENS (HTTP: static token=uid pairs for Claude Code scripts, the menu bar app and the scheduler), AIMYEAR_BASE_URL (the public URL; the OAuth issuer), AIMYEAR_ALLOWED_ORIGINS (extra browser origins), AIMYEAR_WORKPLACE, AIMYEAR_TZ.

Tests

bash
npm test                  # access table guard, anonymous gate and batch smuggling, OAuth discovery,                          # annotations, Origin, version negotiation, surface lock, domain rulesnpm run test:conformance  # a client's path through the real HTTP entry point: initialize and                          # tools/list without a token, then every tool with a throwaway user                          # in the real Firestore; cleans upCONFORMANCE_URL=https://mcp.aimyear.com/mcp npm run test:conformance   # read-only tools, livenpm run test:oauth        # register → consent → real Firebase ID token → code → token (PKCE) →                          # tool call → refresh rotation, plus every refusal; cleans upnpx tsx test/smoke.ts     # the service end to end against Firestore

When you add a tool: give it an entry in src/access.ts (npm test fails without one), run npm run access-doc, bump src/version.ts, run npm run surface-lock.

Hosted (Cloud Run)

bash
gcloud run deploy aimyear-mcp --source . --project aimyear-app --region us-central1 --quiet

Env vars on the service: AIMYEAR_TOKENS, AIMYEAR_TZ, AIMYEAR_PROJECT, AIMYEAR_BASE_URL=https://mcp.aimyear.com. mcp.aimyear.com is a Cloud Run domain mapping (CNAME to ghs.googlehosted.com in Route 53) and is in Firebase Auth's authorized domains. Health: /health. The legacy URL https://<service>/c/<token>/mcp still works.

Call analytics: scripts/mcp-calls.sh [1d] prints calls per tool and the call sequences per person and client.

License

FSL-1.1-MIT: you can read, run, self-host and change this server, but not offer it as a competing commercial service. Each release becomes MIT two years after it is published. The hosted service is at https://mcp.aimyear.com/mcp.

來源:README.md,提交 99d96f4

工具

59

get_goal

Get goal

The one yearly goal: kind (count or done), metric, starting value, current value, target, deadline, progress, levers (hard/comfortable) and other projects. Call first in most flows.

無需輸入參數。

check_goal_draft

Check goal draft

Check a goal that is not saved yet against the rubric (a countable metric with value today and target, or a done-or-not result you can check yes or no; deadline within 12 months; pace per week). Changes nothing. Returns problems[] and next_question: loop until problems is empty, then call set_goal. Prefer count; use done only when no honest number exists.

輸入參數kindtitlemetrictargetbaselinedeadline

set_goal

Set goal

Save the yearly goal, or replace it with the next one. Rejects with problems[] if the rubric fails. Keeps levers and projects. area is which of the five life areas the goal belongs to.

輸入參數whyareakindtitle必填metrictargetbaselinedeadline必填

record_progress

Record progress

Record the current value of the goal metric ("I now have 4 customers"), or of a countable milestone when milestoneId is given ("I have talked to 7 people"). For a done-or-not goal, 1 marks it done. One value per date: calling again for the same date corrects it. Says when the target is reached; a countable milestone that reaches its target is done.

輸入參數datevalue必填milestoneId

set_levers

Set levers

Replace the list of levers: the recurring kinds of goal work. At least one must be kind=hard (the work the user avoids). keywords/repos are hints for classifying sessions from their task text. wip_hashtag only for a lever whose work belongs to one product. Pass existing ids to keep them.

輸入參數levers必填

set_projects

Set projects

Replace the list of other projects (paid work, other products, life routines), so their sessions count as other work or life, not goal work. Pass the whole list: leave one out to remove it, change its name or hints to edit it. Pass existing ids to keep them. wip_hashtag ties a project to its WIP project (list_wip_projects shows the user's). public: true only when the user says they build this project in public: its sessions with a real summary, and its moves, then go to WIP automatically 10 minutes later unless cancelled (Pro, WIP connected).

輸入參數projects必填

get_path

Get path

Milestones with kind, progress (recorded value or steps done), pace (ahead/on_pace/behind) and their steps. With tracks: tracks[], each with its current_milestone_id (every track has its own current milestone); current_milestone_id is then the first open one in list order. Without tracks, current_milestone_id is the one to work on.

無需輸入參數。

set_milestones

Set milestones

Replace the list of ordered milestones under the goal (2–6, or up to 6 per track), each countable (metric and target) or measured by its steps, with a due date before the goal deadline; due dates in order within a track. Pass each existing id, or that milestone's steps are deleted. To change one milestone, use edit_milestone.

輸入參數milestones必填

set_tracks

Set tracks

Replace the tracks of the path: 0 to 3 different ways to reach the same aim (e.g. two products that could each earn the target), each with its own milestones and current milestone. reach says how this track alone would reach the aim. milestoneIds puts those milestones into the track, in that order. An empty list makes the path one list again. Use tracks only when the user chooses to work on more than one way; never present one track as the wrong one.

輸入參數tracks必填

edit_milestone

Edit milestone

Change one milestone: title, kind (count or steps), metric, target, due date, status or track. status=retired drops it without finishing; done or retired moves its track to the next milestone. Its steps are kept.

輸入參數duekindtitlemetricstatustargettrackIdmilestoneId必填

add_steps

Add steps

Add concrete steps to a milestone. A step is an action that fits a few work blocks ("email 10 people from the waitlist"), not "do marketing". Abstract steps are rejected. Put a hard-lever step first; preparation only where it blocks it (warns otherwise).

輸入參數op_idsteps必填milestoneId必填

edit_step

Edit step

Change one step: title, status (todo/doing/done), order, lever, estimate.

輸入參數ordertitlestatusstepId必填leverIdestimateMin

delete_step

Delete step

Delete one step from the path.

輸入參數stepId必填

next_steps

Next steps

Open steps of the current milestone (of every track, taken in turns, each step with its track), hard-lever steps first: the candidates for today's main step.

輸入參數count

get_commitments

Get commitments

Recurring weekly time: commitments (school runs, training, classes), overhead (sleep, meals) and focus windows.

無需輸入參數。

set_commitments

Set commitments

Replace the list of recurring weekly commitments. days are ISO weekdays 1=Mon..7=Sun; use timesPerWeek instead when there are no fixed days. Pass existing ids to keep them. A recurring life event read from the user's calendar (the children's classes) is one entry with its calendar_event_id, recorded once.

輸入參數commitments必填

get_capacity

Get capacity

Weekly time budget out of 168 hours: overhead, hours committed per area, focus windows, and what is still unaccounted for. Nothing is assumed.

無需輸入參數。

get_planning_context

Get planning context

Everything needed to plan a day: goal and pace, next_steps, yesterday's summary and undone items, week balance, days since a hard lever. Defaults to tomorrow. The agent plans; then call set_plan.

輸入參數date

get_plan

Get plan

The plan for a day (default today).

輸入參數date

set_plan

Set plan

Replace the plan for a day. Exactly one item must have isMainStep=true (the step toward the goal), ideally linked by stepId from next_steps and on a hard lever. Warns when no item is on a hard lever. Other items: paid work, family, workout, etc. with their area. Items that stay keep their done state.

輸入參數dateitems必填

edit_plan_item

Edit plan item

Change one plan item: mark it done or not done, rename it, change its estimate, area or links, or make it the main step. done=true also completes its linked path step. For a weekly routine, count says how many units this tick did (talked to 2 people today). For a routine, level minimum says only its bad-day minimum was done: it counts for the day, reported apart from full.

輸入參數areadatedonecountleveltitleitemId必填stepIdleverIdprojectIdisMainStepestimateMin

get_routines

Get routines

Routines: small steps that repeat on fixed weekdays, e.g. "talk with one person on Reddit", or that count up to a number a week, e.g. "talk to 5 people a week", each with an optional bad-day minimum. The server adds them to each matching day's plan, so every device and agent sees the same checks. With no routines yet, returns ready-made starters for the aim's area to offer as they are.

無需輸入參數。

set_routines

Set routines

Replace the list of routines: small steps that repeat on fixed weekdays. From today on, each one appears as a plan item on its days; tick it with edit_plan_item, skip it for one day with delete_plan_item. set_plan keeps them. days are ISO weekdays 1=Mon..7=Sun, default every day. perWeek makes it a weekly count: each tick adds its count (default 1), and once the week reaches perWeek it leaves the plan until Monday. Link it to the goal with leverId. minimum is the small version for a bad day ("read one thread" for "talk to one person"). Pass existing ids to keep them.

輸入參數routines必填

delete_plan_item

Delete plan item

Remove one item from a day's plan. A routine item is skipped for that day only.

輸入參數dateitemId必填

set_day_mode

Set day mode

Tracking for a day: full (everything recorded, the default) or off (timer and reminders only, nothing stored, no plan required).

輸入參數datemode必填

get_now

Get now

What is happening now: running sessions with attention shares, the timer, today's main step, today's minutes, the streak and a one-line nudge.

無需輸入參數。

start_session

Start session

Start a session of work and, if none is running, the timer. Returns a verdict: ok | stop | plan_first. On "stop" NO session is created: relay the message, ask the user; if they insist, call again with override=true. Several sessions may run at once (two terminals) and share attention by weight. Apps replaying a queued start pass op_id, their own session_id and start_at; an agent leaves all three out.

輸入參數areatask必填op_iditemIdstepIdweightleverIdminutesoverridestart_atdirectionexclusive另有 3 個

add_note

Add note

Add a one-line note to a running session (this connection's, or session_id). May classify a session that was unclassified.

輸入參數note必填op_idsession_id

split_attention

Split attention

Set attention weights of the running sessions at once, e.g. {"abc": 0.7, "def": 0.3}. Applies to the whole session. For a finished session use edit_session.

輸入參數shares必填

stop_session

Stop session

Stop a running session with a summary and outcome. Pass session_id from get_now; without it, only this connection's single running session is stopped, never another one. The timer keeps running for other sessions. outcome=done completes the linked plan item or path step. Without end_at or op_id it refuses a session that already ended: use edit_session for that. With end_at (apps delivering a stop queued offline) a second stop on the same session is merged, whatever order they arrive in: the earliest end wins, done wins over any other outcome, the first summary stays and a different later one goes to the notes; the answer says applied: ended | shortened | recorded.

輸入參數op_idend_atoutcome必填summary必填wip_textsession_idattention_share

stop_timer

Stop timer

Stop the timer ("pause", "stop", "stand up") and every running session with it. There is no paused state: resuming starts a new session. Pass summary and outcome to save them on the sessions it closes, or call stop_session first. Returns the break length.

輸入參數outcomesummary

add_session

Add session

Add past time that was not timed: minutes (ending now, or at end), or start+end as HH:MM on date. For calls, children, workout, paid work, or work done away from the agent, or a calendar event that happened (pass its calendar_event_id: the same event is never logged twice). Apps replaying a queued entry pass op_id, so a retry does not count the time twice.

輸入參數endareadatetask必填op_idstartitemIdstepIdweightleverIdminutesexclusive另有 2 個

edit_session

Edit session

Fix a session, running or finished: start and end (HH:MM on date; an end before the start means it ran past midnight), task, area, project, lever, step, plan item, summary, outcome, attention share, weight. It is classified again after a change. Use it when a timer was forgotten or a session was labelled wrong.

輸入參數endareadatetaskstartitemIdstepIdweightleverIdoutcomesummaryexclusive另有 3 個

delete_session

Delete session

Delete a session, running or finished, so it no longer counts. Pass session_id from get_now or list_sessions; without it, only this connection's single running session is deleted, never another one.

輸入參數op_idsession_id

add_move

Add move

Record a move: one action toward the aim with no duration, e.g. a small fix the user described to you from the phone, or a message sent. task says what changed, in plain words. Classified like a session (pass leverId, stepId, itemId or projectId when known). Past days are fine (date). completes_item: true with item_id ticks that plan item, so a move can finish the main step. Counts toward the weekly target. Use it for work that had no timer; use add_session for timed work.

輸入參數areadatetask必填timeitemIdstepIdleverIdwip_textprojectIdcompletes_item

list_moves

List moves

Moves in a date range (default the last 7 days), with ids, whether each was toward the aim and on the hard part.

輸入參數tofrom

delete_move

Delete move

Delete a move recorded by mistake. Pass move_id from list_moves. A plan item it ticked stays ticked.

輸入參數move_id必填

list_sessions

List sessions

Sessions in a date range (default the last 7 days), with ids, optionally filtered by area or project.

輸入參數toareafromprojectId

find_gaps

Find gaps

Untimed stretches of 20+ minutes between the first and last session of a day. Ask the user what happened there.

輸入參數date

summarize_day

Summarize day

Full summary of a day: wall and attention minutes per area, classification and lever, sessions, gaps, overlaps, overrides.

輸入參數date

summarize_week

Summarize week

A week, Monday to Sunday (to today for the current week): main-step days, goal share, hard share, area balance, overrides, streak, milestone pace.

輸入參數date

get_insights

Get insights

Week (the last 7 days) or month (the last 30 days) ending on to (default today): minutes per day on the aim, other work and life; hard vs comfortable share of aim time; an hour × weekday heatmap of aim minutes (6:00–23:00, Mon–Sun) with its hard part and the peak; main-step days; and comebacks (active days after 2+ days away, over 90 days). Wall minutes of finished sessions, as the app shows them.

輸入參數torange

find_leaks

Find leaks

Where time leaks: comfortable goal work while the main step waited, overrides, unplanned work, gaps, switching, missed main steps, days without a plan. Default the last 7 days.

輸入參數tofrom

get_settings

Get settings

Timezone, the default workplace (desktop or mobile; reminders go to every registered device either way), timer settings, which networks get progress posts (post_to), tracking (time, moves or quiet), the weekly target and the weekly review email (weekly_review_email).

無需輸入參數。

set_settings

Set settings

Change any of: timezone (IANA name, e.g. Europe/Madrid; it sets where each day starts and ends), workplace (the default for sessions; reminders go to every device), stand-up interval workMin, breakMin, longBreakEvery, longBreakMin, standup on/off, post_to (networks for progress posts), tracking (time, moves or quiet), weekly_target (days a week toward the aim) and weekly_review_email (on/off).

輸入參數post_tostandupworkMinbreakMintimezonetrackingworkplacelongBreakMinweekly_targetlongBreakEveryweekly_review_email

add_device

Add device

Register a device token so server reminders (stand up, break over) can reach it. The phone app registers itself; use this for testing or a manual token.

輸入參數labeltoken必填platform必填

list_devices

List devices

Which devices can receive reminders, and when each was last seen.

無需輸入參數。

delete_device

Delete device

Remove a device so it stops receiving reminders.

輸入參數token必填

list_agents

List agents

Agents connected to this AimYear account (Claude, ChatGPT, Claude Code, the AimYear app…): name, client_id, when it connected and when it was last active. current marks the one calling.

無需輸入參數。

delete_agent

Delete agent

Disconnect one agent: its sign-in for this account is deleted and it can no longer read or change anything until it connects again. Only on the user's explicit request. client_id from list_agents.

輸入參數client_id必填

add_social_account

Add social account

Connect WIP (wip.co) or Bluesky so AimYear can post the day's progress there when the user says Post (Pro). WIP: api_key from wip.co settings. Bluesky: handle and an app password (Settings → Privacy and security → App passwords), never the account password. The login is checked, stored encrypted and never shown again. The app's connect screen usually calls this; if the user pastes a key into the chat, use it once and do not repeat it.

輸入參數handleapi_keynetwork必填app_password

list_social_accounts

List social accounts

Connected networks (handle, since when), which of them get progress posts, and whether the user has Pro. Never returns any key or password.

無需輸入參數。

delete_social_account

Delete social account

Disconnect a network and delete its saved login. Posts already made stay there.

輸入參數network必填

get_post_draft

Get post draft

The day's progress drafted from the record. text is the day's post (Bluesky): it leads with what moved toward the aim (the day's session summaries and moves, in the user's words), then the main step done or not, the aim and its progress, and, if there is room, the week against the target, minutes on the aim and on hard work (never with quiet numbers), routines, comebacks; at most 300 characters, ending with aimyear.com. wip_todos is for WIP: one todo per project worked on that day, about what was done on it, with that project's #hashtag (none when it has no hashtag). Per network: ready, already posted, or skipped because the user already posted there that day. nothing_to_post: true means nothing is recorded toward the aim that day: there is no text; ask the user what they did and record it (add_move) before drafting again. Posts nothing. Pro.

輸入參數date

add_post

Add post

Post the day's progress, only after the user explicitly said to post. text is the day's post as the user edited it, for Bluesky (default: the draft from get_post_draft). wip_todos are the WIP todos as the user edited them, each with the key from the draft (default: the draft's todos; with text and no wip_todos, WIP gets text as one todo). Goes to the networks chosen in settings, or the ones given. A network where the user already posted that day themselves is skipped. Each day goes to each network (on WIP, each project) once: a retry never posts twice. Today or yesterday only. Pro.

輸入參數datetextnetworkswip_todos

list_auto_posts

List auto posts

The automatic WIP todos of a day (default today), each from a session or move on a project marked public: queued (post_at, still cancellable), posted (url), cancelled, offered (the summary was short, so the phone offered it with a Post button and nothing went out) or failed. Posts nothing.

輸入參數date

edit_auto_post

Edit auto post

Change the text of an automatic WIP todo and post it now. Only when the user asked, with their words as they want them on WIP. Also posts an offered, failed or cancelled one when the user says to post it. One todo posts once: a retry never posts twice. Pro.

輸入參數id必填text必填

delete_auto_post

Delete auto post

Cancel an automatic WIP todo before it posts (the user said not to post it). A todo already on WIP stays there: the answer says so, with its link.

輸入參數id必填

list_wip_projects

List wip projects

The user's own WIP (wip.co) projects with their hashtags, read through their saved WIP login, and which AimYear project or lever carries each hashtag; plus the AimYear projects and levers without one. Use it once WIP is connected to attach the hashtags (set_projects / set_levers, wip_hashtag), asking the user only when unsure. Posts nothing. Pro.

無需輸入參數。

版本歷史

1
  1. v0.4.2Oct 18, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

    請在儲存庫或註冊中心條目中宣告授權條款。