MCP App Store
by KeenEthics

Overview

Elodus helps teams organize software-development workspaces, read and author structured documents, manage work orders and data models, explore research and grant sources, and maintain connected project artifacts through ChatGPT.

Tools

ack_instructions

ChatGPT
Mark 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

ChatGPT
Add 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

ChatGPT
Wire 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

ChatGPT
File 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

ChatGPT
Append 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

ChatGPT
Build 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

ChatGPT
Create 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

ChatGPT
Start 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

ChatGPT
Create 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

ChatGPT
Create 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

ChatGPT
Create 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

ChatGPT
Create 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

ChatGPT
Create a new SDLC phase in a workspace.

create_widget

ChatGPT
Create 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

ChatGPT
Queue a new workorder in a workspace (write, requires per-user key).

crossref_get_bibtex

ChatGPT
Resolve 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

ChatGPT
Resolve a single DOI to canonical Crossref metadata.

crossref_search_works

ChatGPT
Search 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

ChatGPT
Soft-delete a document (deleted_at stamp). Sections are preserved but hidden.

delete_object

ChatGPT
Soft-delete an object instance.

delete_section

ChatGPT
Hard-delete a section by id. Cannot be undone.

delete_workorder

ChatGPT
Soft-delete a workorder (deleted_at stamp).

extract_business_process

ChatGPT
Extract structured data from a business process diagram instead of raw XML: pools/lanes, every node (id, type, name), the sequence flows with their branch conditions, and summary counts. Use this to read/understand a process. (read)

get_artifact

ChatGPT
Return 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

ChatGPT
Fetch 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

ChatGPT
Return a business process diagram's XML + any prior AI analysis.

get_collection

ChatGPT
What 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

ChatGPT
Return a data-model entity with all its fields.

get_document

ChatGPT
Return a document with its sections, rendered as markdown.

get_object

ChatGPT
Fetch one object instance: its attributes, plus sections (documents) or fields (records), and the type's guidance.

get_phase

ChatGPT
Get one phase with its dependencies.

get_repo_file

ChatGPT
Read 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_screen

ChatGPT
Return a Designer screen's metadata + description + AI analysis. Does NOT include the image bytes — call get_screen_image for that.

get_screen_image

ChatGPT
Fetch 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

ChatGPT
Return the body of a section by id.

get_widget

ChatGPT
Get a widget's html + metadata by slug (read-only) — use to review before editing.

get_workorder

ChatGPT
Fetch one workorder (title + body + status + response).

grants_gov_get_opportunity

ChatGPT
Full 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

ChatGPT
Search 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.

list_artifacts

ChatGPT
List files uploaded to a workspace for analysis (id, name, type, size, analyzed?).

list_business_processes

ChatGPT
List business process diagrams in a workspace (id, name, analyzed?).

list_collections

ChatGPT
List 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

ChatGPT
List data-model entities in a workspace.

list_databases

ChatGPT
List a workspace's databases (Database designer), with a table count each.

list_documents

ChatGPT
List documents in a workspace, optionally filtered by kind.

list_instructions

ChatGPT
List pending custom instructions queued by humans for the agent.

list_object_types

ChatGPT
Discover 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

ChatGPT
List instances of an object type, optionally filtered by exact attribute values via filter.

list_phases

ChatGPT
List SDLC phases in a workspace.

list_repo_files

ChatGPT
List files in a synced workspace repo, optionally under a sub-path. Returns up to 500 paths.

list_repos

ChatGPT
List git repos linked to a workspace (id, name, url, branch, status, last commit).

list_saved_searches

ChatGPT
List 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

ChatGPT
List Designer screens in a workspace.

list_sections

ChatGPT
List sections (id, depth, heading) of a document.

list_widgets

ChatGPT
List the widgets in a workspace (read-only).

list_workorders

ChatGPT
List recent workorders in a workspace.

list_workspaces

ChatGPT
List the workspaces visible to the caller.

nih_get_grant

ChatGPT
Full 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

ChatGPT
List 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

ChatGPT
Search 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

ChatGPT
Full detail for one NSF award by its award id (e.g. 1052893) — PI, awardee, program, amounts, period and abstract.

nsf_search_awards

ChatGPT
Search 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

ChatGPT
List files in the workspace's connected Overleaf project (read-only — for reviewing/orientation).

overleaf_read_file

ChatGPT
Read 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

ChatGPT
Replace 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

ChatGPT
Insert 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

ChatGPT
Full records: abstract + MeSH terms (pubmed), or full-text XML for PMC open-access (db='pmc', rettype='full').

pubmed_summary

ChatGPT
Quick 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

ChatGPT
Queue a follow-up instruction in this workspace's feed (for yourself or a future Claude poll).

readme_first

ChatGPT
READ 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

ChatGPT
Take one item off a collection's shelf, by source + ref.

remove_phase_dependency

ChatGPT
Remove a phase dependency edge.

run_workorder

ChatGPT
Claim a queued workorder for execution. Marks status=running, stamps sent_at.

sbir_awards_get

ChatGPT
Full 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.

set_data_model_field_fk

ChatGPT
Wire (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

ChatGPT
Post a response (and optional error) for a running workorder. Marks completed/failed.

unpaywall_lookup

ChatGPT
Given a DOI, report whether a LEGAL open-access copy exists and where (best_oa_url). OA-only — never bypasses a paywall.

update_artifact_analysis

ChatGPT
Write back the AI analysis (markdown) for an artifact, after reading it via get_artifact / get_artifact_file. (write)

update_business_process

ChatGPT
Replace a business process diagram's XML (modeler format). (write)

update_business_process_analysis

ChatGPT
Write back the AI analysis (markdown) for a business process diagram. (write)

update_document

ChatGPT
Update a document's title and/or summary.

update_object

ChatGPT
Update an object instance's title and/or attributes (attributes validated, partial allowed).

update_screen_analysis

ChatGPT
Write 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

ChatGPT
Update a section's heading and/or body (write).

update_widget

ChatGPT
Update a widget's name / description / html (replaces the html wholesale).

update_workorder

ChatGPT
Update workorder fields (status, phase, priority, title, body). Only pass what you want to change.

update_workorder_validation

ChatGPT
Record 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

ChatGPT
Read a widget's JSON store — all keys, or one if key is given (read-only).

widget_store_set

ChatGPT
Set 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

ChatGPT
Fetch a single Zotero item by its item key from the workspace's connected library. Read-only. Returns the normalized reference.

Capabilities

Writes

Example Prompts

Click any prompt to copy it.

App Stats

103

Tools

3

Prompts

ChatGPT

Platforms

Works with

ChatGPT

Data refreshed daily