ack_instructions
ChatGPTMark instructions as claimed/done so future polls don't re-surface them. Pass either a list of ids, or all=true to ack every queued instruction in the workspace.
add_data_model_field
ChatGPTAdd a field to a data-model entity. fk_to_entity_id wires this field as a foreign key to another entity in the same workspace — drives the connection arrows on the ER diagram. composition=true marks the FK as ownership-style (rendered as a filled diamond in class diagrams).
add_phase_dependency
ChatGPTWire a 'this phase depends on that phase' edge into the workspace's phase board. Drives the dependency arrows on /phases. Idempotent — re-adding an existing edge is a no-op.
add_to_collection
ChatGPTFile one result into a collection. Take source+ref straight from the search result you are filing (source='nih_reporter', ref=core project number; source='crossref', ref=DOI). Do NOT curate a collection the researcher made without being asked — the set exists because a person chose it.
append_section
ChatGPTAppend a new section to a document (write). For a PRESENTATION document a section IS a slide: prefer a reference-token body ('@present:document:42', '@present:section:99', '@present:widget:<slug>', '@present:bpmn:<slug>') to show an existing object live. If the content you want on the slide does NOT exist yet, FIRST create a document for it (create_document) and link THAT — don't write a free-text slide; text slides go stale while linked ones stay live. Use plain markdown only for title/intro/divider slides.
build_business_process
ChatGPTBuild a business process diagram from a structured spec — the easy way for an agent to author one. You give nodes + flows (+ optional swimlanes); the server generates valid BPMN 2.0 XML AND lays it out (positions, edge routing) so you never compute coordinates. Renders in the modeler and is fully editable by humans. Pass process_id to rebuild an existing diagram. Prefer this over create_business_process (which needs raw XML). (write)
create_business_process
ChatGPTCreate a business process diagram from raw XML (the OMG BPMN 2.0 schema the modeler reads/writes, including diagram-interchange coordinates). Most agents should use build_business_process instead — it takes a node/flow spec and lays it out for you. Use this only when you already have full BPMN XML. (write)
create_collection
ChatGPTStart a new collection. Use when the researcher wants to keep a set of results together — 'the papers I will cite', 'calls worth applying to this cycle'.
create_data_model_entity
ChatGPTCreate a table in a workspace's database (the Database designer). Pass database_slug (or database_id) to put it in a specific database; omit both to use the workspace's default database. Use create_database to make a new one. (kind is accepted for back-compat but ignored — everything is a table now.)
create_database
ChatGPTCreate a database (a container for tables) in a workspace, for the Database designer. Tables are added with create_data_model_entity targeting this database's slug.
create_document
ChatGPTCreate a new document in a workspace (write). The 'kind' MUST be one of THIS workspace's document_kinds — call list_object_types first and use a kind from its document_kinds list; do not assume generic kinds like 'blueprint'. To build a SLIDE DECK / presentation, pass kind='presentation' (a universal utility kind always accepted, even if it's not in the ontology): the document's sections become the slides — add each with append_section. PREFER REFERENCE SLIDES: to put existing workspace content on a slide, set the section body to a SINGLE reference token — '@present:document:42', '@present:section:99', '@present:widget:<slug>', '@present:bpmn:<slug>' — so the slide shows the LIVE object and stays in sync. If the slide's content does NOT exist yet, FIRST create a document for it (create_document) and link THAT — don't write a free-text slide. Do NOT retype an existing document/section's content into a text slide (it duplicates and goes stale). Use a plain markdown body only for title / intro / divider slides that have no underlying object. SLIDE SIZING: each slide is one full 16:9 screen shown from a distance, NOT a scrolling page — the presenter does not shrink to fit. Budget each slide to about a short heading plus ~6 bullet lines (~40 words), ~10 lines / ~90 words absolute max; split dense content across MORE slides rather than overflowing one. Prefer short bullets over paragraphs; one idea per slide.
create_object
ChatGPTCreate an instance of an ontology object type. attributes are validated against the type's schema. For document types pass optional doc_kind; for record types optional entity_kind.
create_phase
ChatGPTCreate a new SDLC phase in a workspace.
create_saved_search
ChatGPTSave a named search so the team (and you) can re-run it. Stores CRITERIA, never results. Draft one when the researcher lands on a query worth keeping, then tell them you saved it. Defaults to 'available' — do NOT pin unless the researcher explicitly asks, because pinning makes it standing context in every future conversation. Criteria must match the source's schema (see the source's own search tool for the allowed keys).
create_widget
ChatGPTCreate a Widget — a small self-contained interactive frontend mini-app (e.g. a mortgage calculator) to illustrate an interface/interaction. Seed any data with widget_store_set.
create_workorder
ChatGPTQueue a new workorder in a workspace (write, requires per-user key).
crossref_get_bibtex
ChatGPTResolve a DOI to a ready-to-paste BibTeX entry (or a formatted citation). Feed the content straight into an Overleaf .bib via overleaf_write_file.
crossref_get_work
ChatGPTResolve a single DOI to canonical Crossref metadata.
crossref_search_works
ChatGPTSearch Crossref for scholarly works by free text; find a DOI from a title. Returns normalized records (id/doi/title/authors/year/venue/type/url/oa_url/abstract). Chains into overleaf_write_file via crossref_get_bibtex.
delete_document
ChatGPTSoft-delete a document (deleted_at stamp). Sections are preserved but hidden.
delete_object
ChatGPTSoft-delete an object instance.
delete_saved_search
ChatGPTDelete a saved search (soft delete, like delete_document).
delete_section
ChatGPTHard-delete a section by id. Cannot be undone.
delete_workorder
ChatGPTSoft-delete a workorder (deleted_at stamp).
get_artifact
ChatGPTReturn an artifact's metadata + extracted text (for text files) + any prior AI analysis. For images, call get_artifact_file for the bytes.
get_artifact_file
ChatGPTFetch an artifact's bytes. Images return as an MCP image block (multimodal); text files return their extracted text; other binaries return a note.
get_business_process
ChatGPTReturn a business process diagram's XML + any prior AI analysis.
get_collection
ChatGPTWhat is on a collection's shelf. Each item carries the ref its SOURCE addresses it by (an NIH core project number, a DOI), so you can fetch the live record with nih_get_grant / crossref_get_work rather than trusting the stored snapshot.
get_data_model
ChatGPTReturn a data-model entity with all its fields.
get_document
ChatGPTReturn a document with its sections, rendered as markdown.
get_object
ChatGPTFetch one object instance: its attributes, plus sections (documents) or fields (records), and the type's guidance.
get_phase
ChatGPTGet one phase with its dependencies.
get_repo_file
ChatGPTRead a single file from a synced workspace repo. Capped at 200KB; returns text only. Pass start/end (1-based) to get a line range.
get_saved_search
ChatGPTFull detail of one saved search: its exact criteria and the researcher's notes on why it exists and when to use it.
get_screen
ChatGPTReturn a Designer screen's metadata + description + AI analysis. Does NOT include the image bytes — call get_screen_image for that.
get_screen_image
ChatGPTFetch the uploaded mockup image for a Designer screen as an MCP image content block (base64 + mimeType). The agent gets this as a multimodal input it can analyze directly. Returns a text fallback if the screen has no image.
get_section
ChatGPTReturn the body of a section by id.
get_widget
ChatGPTGet a widget's html + metadata by slug (read-only) — use to review before editing.
get_workorder
ChatGPTFetch one workorder (title + body + status + response).
grants_gov_get_opportunity
ChatGPTFull detail for one open funding opportunity — eligibility, award ceiling/floor, estimated funding, expected number of awards, agency contact, and the complete call text. Look it up by opportunity number (e.g. RFA-CA-27-020).
grants_gov_search_opportunities
ChatGPTSearch OPEN funding opportunities you can APPLY FOR (NOFOs) across all federal agencies, including NIH and NSF. This is the PROSPECTIVE tool — for grants already awarded use nih_search_grants / nsf_search_awards instead. Expired calls are never returned. Results are sorted by soonest deadline. Full-text over title + the call text.
link_objects
ChatGPTCreate a directed relationship edge between two object instances. Validated against the ontology's relationship definition (endpoint types + cardinality).
list_artifacts
ChatGPTList files uploaded to a workspace for analysis (id, name, type, size, analyzed?).
list_business_processes
ChatGPTList business process diagrams in a workspace (id, name, analyzed?).
list_collections
ChatGPTList the workspace's COLLECTIONS — curated shelves of results a researcher chose to keep (grants, awards, open calls, papers), from any source. A saved search is a question; a collection is the answers a human kept. PINNED collections are standing context: consult them unprompted and cite them by name. ('off' ones are never shown.)
list_data_models
ChatGPTList data-model entities in a workspace.
list_databases
ChatGPTList a workspace's databases (Database designer), with a table count each.
list_documents
ChatGPTList documents in a workspace, optionally filtered by kind.
list_instructions
ChatGPTList pending custom instructions queued by humans for the agent.
list_links
ChatGPTList relationship edges touching an object instance, optionally filtered by relationship and direction (out|in|both).
list_object_types
ChatGPTDiscover what you can create in this workspace: the valid document_kinds for create_document, plus the ontology's object types (attribute schemas + per-type guidance) and relationship definitions. Call this first, before create_document or create_object.
list_objects
ChatGPTList instances of an object type, optionally filtered by exact attribute values via filter.
list_phases
ChatGPTList SDLC phases in a workspace.
list_repo_files
ChatGPTList files in a synced workspace repo, optionally under a sub-path. Returns up to 500 paths.
list_repos
ChatGPTList git repos linked to a workspace (id, name, url, branch, status, last commit).
list_saved_searches
ChatGPTList the workspace's saved searches — named queries a researcher has curated. PINNED ones are standing reference: run them proactively when the conversation touches their subject, and cite them by name. 'available' ones are for when the user asks. (Searches set to 'off' are never returned.)
list_screens
ChatGPTList Designer screens in a workspace.
list_sections
ChatGPTList sections (id, depth, heading) of a document.
list_widgets
ChatGPTList the widgets in a workspace (read-only).
list_workorders
ChatGPTList recent workorders in a workspace.
list_workspaces
ChatGPTList the workspaces visible to the caller.
nih_get_grant
ChatGPTFull detail for one NIH grant by its CORE project number (e.g. R01GM100888), including every funded fiscal year, the abstract, and a linked-publication count.
nih_grant_publications
ChatGPTList the publications citing an NIH grant, by core project number. Returns PMIDs (and PMC ids where open access). This is a local JOIN, so it's instant. Feed the PMIDs to pubmed_summary/pubmed_fetch, or resolve DOIs via crossref/unpaywall.
nih_search_grants
ChatGPTSearch NIH-funded grants (AWARDED projects — retrospective; for open funding opportunities to apply for, this is the wrong tool). Served from a local mirror of NIH's bulk RePORTER export, so it is fast and unmetered. Full-text search over project titles and terms; set search_abstracts to also search abstract text. Chain: nih_search_grants -> nih_grant_publications -> pubmed/crossref for the papers.
nsf_get_award
ChatGPTFull detail for one NSF award by its award id (e.g. 1052893) — PI, awardee, program, amounts, period and abstract.
nsf_search_awards
ChatGPTSearch NSF-funded awards (AWARDED grants — retrospective; not open funding opportunities to apply for). Served from a local mirror of the NSF awards API, so it is fast and unmetered. Full-text over title + abstract. Use alongside nih_search_grants to cover both major US science funders.
overleaf_list_files
ChatGPTList files in the workspace's connected Overleaf project (read-only — for reviewing/orientation).
overleaf_read_file
ChatGPTRead a .tex/.bib file from the Overleaf project as context. Use this to REVIEW and to study the current content and style before any edit. Read-only — never changes anything. These are SCIENTIFIC / academic LaTeX documents: be rigorous and precise, and preserve scholarly conventions (math, notation, theorem/proof environments, citations, labels). Do ONLY what the author explicitly asks — never add, reword, restructure, or 'improve' anything unrequested. Distinguish reviewing (read-only) from additions from changes: reviewing must not write. Make SURGICAL edits — read the file first, identify the exact insertion/edit point, change only that, and leave everything else (preamble, packages, other sections, notation, formatting) byte-for-byte unchanged, matching the document's existing style. NEVER place content after \end{document} (LaTeX ignores it). Be powerful and thorough on what is asked. Each write AUTO-PUBLISHES to Overleaf — there is no sync step and no sync tool: publishing is handled for you (immediately, or when your change is approved if the workspace requires review). Just write; do not try to sync or commit.
overleaf_write_file
ChatGPTReplace the ENTIRE contents of a text file. Use only when the author asks to change the document, and only after reading it: return the full file with ONLY the requested change applied, every other byte preserved. Prefer overleaf_write_section for section-level edits. These are SCIENTIFIC / academic LaTeX documents: be rigorous and precise, and preserve scholarly conventions (math, notation, theorem/proof environments, citations, labels). Do ONLY what the author explicitly asks — never add, reword, restructure, or 'improve' anything unrequested. Distinguish reviewing (read-only) from additions from changes: reviewing must not write. Make SURGICAL edits — read the file first, identify the exact insertion/edit point, change only that, and leave everything else (preamble, packages, other sections, notation, formatting) byte-for-byte unchanged, matching the document's existing style. NEVER place content after \end{document} (LaTeX ignores it). Be powerful and thorough on what is asked. Each write AUTO-PUBLISHES to Overleaf — there is no sync step and no sync tool: publishing is handled for you (immediately, or when your change is approved if the workspace requires review). Just write; do not try to sync or commit.
overleaf_write_section
ChatGPTInsert or replace ONE \section/\subsection block, leaving the rest of the file untouched. A new section is inserted before \end{document}; an existing identical heading is replaced in place. Use only for requested additions/changes, not reviews. These are SCIENTIFIC / academic LaTeX documents: be rigorous and precise, and preserve scholarly conventions (math, notation, theorem/proof environments, citations, labels). Do ONLY what the author explicitly asks — never add, reword, restructure, or 'improve' anything unrequested. Distinguish reviewing (read-only) from additions from changes: reviewing must not write. Make SURGICAL edits — read the file first, identify the exact insertion/edit point, change only that, and leave everything else (preamble, packages, other sections, notation, formatting) byte-for-byte unchanged, matching the document's existing style. NEVER place content after \end{document} (LaTeX ignores it). Be powerful and thorough on what is asked. Each write AUTO-PUBLISHES to Overleaf — there is no sync step and no sync tool: publishing is handled for you (immediately, or when your change is approved if the workspace requires review). Just write; do not try to sync or commit.
pubmed_fetch
ChatGPTFull records: abstract + MeSH terms (pubmed), or full-text XML for PMC open-access (db='pmc', rettype='full').
pubmed_link
ChatGPTBridge ids across databases (PMID↔PMC↔DOI) or find related articles. Use command='id_bridge' with db='pmc' to reach PMC full text; 'neighbor' for related PMIDs.
pubmed_search
ChatGPTSearch PubMed/PMC; supports MeSH terms, e.g. 'depression[MeSH] AND screening'. Returns ids to feed into pubmed_summary/pubmed_fetch.
pubmed_summary
ChatGPTQuick metadata (title/authors/journal/year) for a set of PMIDs. Returns normalized records (id/doi/title/authors/year/venue/type/url/oa_url/abstract). Chains into overleaf_write_file via crossref_get_bibtex.
queue_instruction
ChatGPTQueue a follow-up instruction in this workspace's feed (for yourself or a future Claude poll).
readme_first
ChatGPTREAD THIS FIRST. Returns the workspace's practical guide to which tool to use for which job (build a mock UI → widget; write a paper → Overleaf; design a database → data model; find papers → arxiv/pubmed/crossref; etc.). Call it at the start of a session.
remove_from_collection
ChatGPTTake one item off a collection's shelf, by source + ref.
remove_phase_dependency
ChatGPTRemove a phase dependency edge.
research_search
ChatGPTSearch several research sources at once with ONE question — funded NIH grants, funded NSF awards, open Grants.gov calls, and the literature (Crossref/arXiv/PubMed). This is the fastest way to answer 'what is fundable here and who has already been funded for it'. Sources that are switched off for the workspace say so instead of returning nothing. Worth keeping? create_saved_search.
run_saved_search
ChatGPTRun a saved search and return FRESH results (nothing is cached). Results carry a provenance header — attribute them by name in your answer: "per your saved search 'R01s: spinal rehab'…". Use overrides to tweak the criteria for THIS RUN only (e.g. bump fiscal_years); the stored search is not modified.
run_workorder
ChatGPTClaim a queued workorder for execution. Marks status=running, stamps sent_at.
sbir_awards_get
ChatGPTFull detail for one SBIR/STTR award — firm, agency/branch, phase, amount, contract/solicitation/topic, PI, research institution, and small-business status. Look it up by agency_tracking_number or award_key.
sbir_awards_search
ChatGPTSearch AWARDED SBIR/STTR small-business R&D awards across all federal agencies — money already granted (retrospective), useful for 'who won similar work, how much, which agency and phase'. For OPEN calls to apply for, use grants_gov_search_opportunities instead. Full-text over award title + firm + topic; most recent first.
set_data_model_field_fk
ChatGPTWire (or unwire) an existing field as a foreign key to another entity. Use this to add connections between tables on an existing ER diagram without re-adding the field. Pass fk_to_entity_id=null to clear the FK.
submit_workorder_response
ChatGPTPost a response (and optional error) for a running workorder. Marks completed/failed.
unlink_objects
ChatGPTRemove a relationship edge between two object instances.
unpaywall_lookup
ChatGPTGiven a DOI, report whether a LEGAL open-access copy exists and where (best_oa_url). OA-only — never bypasses a paywall.
update_artifact_analysis
ChatGPTWrite back the AI analysis (markdown) for an artifact, after reading it via get_artifact / get_artifact_file. (write)
update_business_process
ChatGPTReplace a business process diagram's XML (modeler format). (write)
update_business_process_analysis
ChatGPTWrite back the AI analysis (markdown) for a business process diagram. (write)
update_document
ChatGPTUpdate a document's title and/or summary.
update_object
ChatGPTUpdate an object instance's title and/or attributes (attributes validated, partial allowed).
update_saved_search
ChatGPTUpdate a saved search's name, criteria, notes or visibility. Criteria are re-validated against the source's schema.
update_screen_analysis
ChatGPTWrite back the AI analysis (markdown) for a Designer screen. Typically called after get_screen_image — the agent reads the image, then writes a description here. (write)
update_section
ChatGPTUpdate a section's heading and/or body (write).
update_widget
ChatGPTUpdate a widget's name / description / html (replaces the html wholesale).
update_workorder
ChatGPTUpdate workorder fields (status, phase, priority, title, body). Only pass what you want to change.
update_workorder_validation
ChatGPTRecord the result of validating a workorder against its requirement docs and linked source code. Set status to 'pass', 'fail', or 'partial' and provide a markdown notes block citing specific docs/files/sections.
widget_store_get
ChatGPTRead a widget's JSON store — all keys, or one if key is given (read-only).
widget_store_set
ChatGPTSet a key in a widget's tiny JSON store (seed/persisted data the running widget reads, e.g. a default rate or sample rows).
zotero_get_item
ChatGPTFetch a single Zotero item by its item key from the workspace's connected library. Read-only. Returns the normalized reference.
zotero_search
ChatGPTSearch the workspace's connected Zotero library by free text (title/creator/year). Read-only. Returns normalized references (key/item_type/title/creators/date/publication/DOI/url/abstract/tags) — feed a DOI into crossref_get_bibtex to cite it.