@theronap/agnoclast-mcp 0.9.217 → 0.9.218

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -33,7 +33,7 @@ export const ALLOWED_TOOL_NAMES = [
33
33
  'list_records', 'read_record', 'page_history', 'page_diff', 'timeline_pull', 'my_brains', 'my_sessions', 'writing_style',
34
34
  'code_graph_query', 'my_retier_notices', 'list_page_grants', 'list_project_members', 'file_requests',
35
35
  // the questions agents used to answer with SQL (2026-10-07) — read-only, the caller's own view
36
- 'record_status', 'my_connectors', 'brain_stats', 'my_sends',
36
+ 'record_status', 'my_connectors', 'brain_stats', 'my_sends', 'find_arrivals',
37
37
  // live authoring core
38
38
  'authoring_context', 'author', 'log_session',
39
39
  // routine, reversible maintenance
package/lib/server.mjs CHANGED
@@ -4660,6 +4660,34 @@ function renderNudge(payload) {
4660
4660
  },
4661
4661
  )
4662
4662
 
4663
+ server.registerTool(
4664
+ 'find_arrivals',
4665
+ {
4666
+ title: 'Ask the arrival pile a question',
4667
+ description: 'Search YOUR arrivals that are in no brain yet — both piles: STAGED (held because nothing could place them) and SEALED (private intake units waiting to be judged) — by identifier prefix, source and age. Use it for "which arrivals carry the files my PR touched?" (identifier: "file:owner/repo:path/" or "repo:owner/name"), "what email from dave@x.com is waiting?" (identifier: "email:dave@x.com"), "what has sat unfiled for 2+ days?" (older_than_hours: 48). Returns ids you can open with staged_look / intake_look and file with place_staged_record / intake_claim → intake_materialize. Plaintext metadata only: a sealed unit\'s content is never opened here. ⚠ A staged arrival matches only on the identifiers HOLDING it (the unclaimed ones).',
4668
+ inputSchema: {
4669
+ identifier: z.string().optional().describe('an identifier or the start of one, matched literally: "file:theronap/cortex:web/lib/", "repo:theronap/cortex", "email:someone@x.com"'),
4670
+ source: z.string().optional().describe("one source: 'email', 'email-in', 'github', 'claude-code', 'imessage', 'meeting'…"),
4671
+ older_than_hours: z.number().optional().describe('only arrivals waiting longer than this'),
4672
+ newer_than_hours: z.number().optional().describe('only arrivals from the last N hours'),
4673
+ pile: z.enum(['staged', 'sealed', 'both']).optional().describe('default both'),
4674
+ limit: z.number().optional().describe('default 30, max 100'),
4675
+ },
4676
+ },
4677
+ async ({ identifier, source, older_than_hours, newer_than_hours, pile, limit }) => {
4678
+ const qs = new URLSearchParams()
4679
+ if (identifier) qs.set('identifier', identifier)
4680
+ if (source) qs.set('source', source)
4681
+ if (older_than_hours != null) qs.set('older_than_hours', String(older_than_hours))
4682
+ if (newer_than_hours != null) qs.set('newer_than_hours', String(newer_than_hours))
4683
+ if (pile) qs.set('pile', pile)
4684
+ if (limit != null) qs.set('limit', String(limit))
4685
+ const r = await readText('search your arrivals', `${BASE}/api/arrivals?${qs}`)
4686
+ if (r.error) return r.error
4687
+ return { content: [{ type: 'text', text: r.json?.text ?? '' }] }
4688
+ },
4689
+ )
4690
+
4663
4691
  server.registerTool(
4664
4692
  'my_sends',
4665
4693
  {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@theronap/agnoclast-mcp",
3
- "version": "0.9.217",
3
+ "version": "0.9.218",
4
4
  "description": "Connect your AI assistant to Cortex — your org's projects, activity, gaps, and directives, scoped to you.",
5
5
  "type": "module",
6
6
  "bin": {