← Back to all apps

Medeloop Grants

Productivityby Medeloop
Launched Mar 25, 2026 on ChatGPT

Medeloop Grants helps researchers and program teams move from “What should we apply for?” to a credible first draft without switching tools or starting from scratch. Inside ChatGPT, it combines curated grant data, your professional context, and purpose-built drafting workflows into a single experience. You can ask for relevant funding opportunities, quickly understand whether you’re a good fit, and begin drafting a proposal in the same conversation. What makes it useful in practice is how the pieces connect. Instead of returning a long list of generic results, Medeloop matches grants to your background and research focus, helping you prioritize opportunities that are actually feasible. It also surfaces key constraints like eligibility and deadlines early, so you spend less time chasing grants that are unlikely to work. When you’re ready to write, the platform guides you through structured inputs and generates a solid first-pass draft that you can refine. The drafting process builds on the same context used for discovery, so you don’t have to repeat yourself or reframe your work each time. People tend to value Medeloop Grants because it reduces the overhead around grant work. It helps them focus on the substance of their research instead of navigating fragmented tools, reformatting information, or second-guessing fit. Over time, as it learns from your inputs and past work, it becomes more tailored to how you search and write. The result is a more continuous workflow from discovery to draft, with less friction and fewer wasted cycles.

31ChatGPT Tools
MedeloopDeveloper
ProductivityCategory

Available Tools

Confirm Onboarding Upload

confirm_onboarding_upload
Full Description

Confirm an onboarding file upload by updating DynamoDB references.

Parameters (2 required)
Required
categorystring

File category

filenamestring

Original file name

Confirm Upload

confirm_upload
Full Description

Record a completed upload in the database.

Two-step flow: (1) get_upload_url returns a presigned S3 PUT URL, (2) after the widget uploads the file to S3, this tool records the upload metadata (key, filename, size) in the ProposalDocument table.

Parameters (3 required, 2 optional)
Required
filenamestring

Original file name

proposal_idstring

Proposal ID

s3_keystring

S3 key returned from get_upload_url

Optional
content_typestring

MIME content type

Default: null
sizeinteger

File size in bytes (max 100 MB)

Default: 0

Create Proposal

create_proposal
Full Description

Create a new proposal and return its server-generated ID.

Parameters (1 required)
Required
opportunity_numberstring

Grant opportunity number

Delete Onboarding File

delete_onboarding_file
Full Description

Delete an onboarding file from S3 and DynamoDB.

Parameters (2 required)
Required
categorystring

File category

file_namestring

File name to delete

Export Proposal Docx

export_proposal_docx
Full Description

Export proposal to Word (DOCX) format.

Parameters (1 required)
Required
proposal_idstring

Proposal ID

Export Proposal Pdf

export_proposal_pdf
Full Description

Export proposal to PDF format (via DOCX → LibreOffice conversion).

Parameters (1 required)
Required
proposal_idstring

Proposal ID

Find Custom Grants

find_custom_grants
Full Description

Find Custom Grants

Opens an interactive grants discovery widget that finds grants personalized to the researcher's profile.

When to Use

Use this tool whenever the user wants to:

  • Find grants ("find me grants", "search for grants")
  • Get grant recommendations ("what grants match my profile?")
  • Search for specific grants ("find NIH grants about cancer")

How It Works

This tool opens a widget that: 1. Checks if the user has completed their researcher profile setup 2. If not, guides them through onboarding first 3. Then searches for grants using their profile + any specific queries you provide

Parameters

  • queries (array of strings): Search terms for grants
  • Empty array [] = search based on user's profile/research interests
  • Specific queries = search for those terms, enhanced with profile context

Examples

Profile-based search (user says "find me grants")
find_custom_grants(queries=[])
Specific search (user says "find cancer research grants")
find_custom_grants(queries=["cancer research", "oncology", "tumor biology"])
Combined search (user says "find NIH grants about machine learning")
find_custom_grants(queries=["machine learning", "artificial intelligence", "deep learning"])

Important Notes

  • Always use this tool for grant discovery - it handles onboarding automatically
  • The widget will execute the actual search after ensuring the user is onboarded
  • Do NOT use search_grants directly - that's for internal widget use only
  • After results are shown, the user can interact with the widget to explore grants
Parameters (0 required, 1 optional)
Optional
queriesarray

Search queries for grants (max 20). Empty list means search based on user's profile research interests.

Default: []

Generate Intake Questions

generate_intake_questions
Full Description

Generate AI-driven follow-up intake questions based on Round 1 answers.

Parameters (1 required)
Required
proposal_idstring

Proposal ID

Generate Proposal Template

generate_proposal_template
Full Description

Generate a grant template based on opportunity number.

Parameters (1 required)
Required
opportunity_numberstring

Grant opportunity number

Get Intake State

get_intake_state
Full Description

Retrieve intake state: Round 1/2 answers and revision.

Parameters (1 required)
Required
proposal_idstring

Proposal ID

Get My Biosketch

get_my_biosketch
Full Description

Get my biosketch as a string

Get My Cv

get_my_cv
Full Description

Get my CV as a string

Get My Grants

get_my_grants
Full Description

Get my previously written grants relevant to the query as a list of {file_name, text}

Parameters (1 required, 1 optional)
Required
querystring

Search query

Optional
limitinteger

Max number of results

Default: 10

Get My Interests

get_my_interests
Full Description

Get my research interests and topics. Use this tool when user asks me to find recommended grants for my profile

Get My Key Recent Publications

get_my_key_recent_publications
Full Description

Get my key recent publications relevant to the query as a list of {file_name, text}. These are key publications that I uploaded to the system.

Parameters (1 required, 1 optional)
Required
querystring

Search query

Optional
limitinteger

Max number of results

Default: 10

Get My Profile

get_my_profile
Full Description

Get my researcher information (name, position, institution, research interests)

Get My Publications

get_my_publications
Full Description

Get my publications relevant to the query as a list of {file_name, text}. These are publications found from my Google Scholar profile.

Parameters (1 required, 1 optional)
Required
querystring

Search query

Optional
limitinteger

Max number of results

Default: 10

Get Onboarding Status

get_onboarding_status
Full Description

Get the current user's onboarding status and profile data. Returns onboarding completion status and all profile fields.

Field names match medeloop-app-api DTO format (camelCase).

Get Onboarding Upload Url

get_onboarding_upload_url
Full Description

Get a presigned S3 PUT URL for onboarding file upload.

Widget flow: 1. callTool("get_onboarding_upload_url", {...}) → {url, key} 2. fetch(PUT, url, file_body) — direct to S3 3. callTool("confirm_onboarding_upload", {...}) — if needed

Parameters (2 required, 1 optional)
Required
categorystring

File category: biosketch, cv, previousGrants, keyRecentPublications

filenamestring

Original file name

Optional
content_typestring

MIME content type

Default: application/pdf

Get Proposal Completion State

get_proposal_completion_state
Full Description

Return proposal restore status for refresh handling.

Parameters (1 required)
Required
proposal_idstring

Proposal ID

Get Upload Url

get_upload_url
Full Description

Generate a presigned S3 PUT URL so the widget can upload directly.

Parameters (2 required, 1 optional)
Required
filenamestring

Original file name

proposal_idstring

Proposal ID

Optional
content_typestring

MIME content type

Default: application/pdf

List Proposals

list_proposals
Full Description

List the current user's proposals.

Poll Proposal Updates

poll_proposal_updates
Full Description

Poll for new proposal section updates from the database.

Parameters (1 required, 1 optional)
Required
proposal_idstring

Proposal ID

Optional
last_seen_idinteger

Last seen record ID for cursor-based polling

Default: 0

Retrieve Section Instruction

retrieve_section_instruction
Full Description

Retrieve writing instructions for a specific proposal section.

Section can be one of:

  • 'specific_aims'
  • 'significance'
  • 'approach'
  • 'others'
Parameters (1 required)
Required
sectionstring

Retrieve writing instructions and tips for a specific proposal section. Options: 'specific_aims', 'significance', 'approach', 'others'. Use 'others' for general grant-writing tips.

Save Intake Answers

save_intake_answers
Full Description

Save user intake answers for a proposal.

Parameters (3 required, 1 optional)
Required
answersobject

Answer key-value pairs

proposal_idstring

Proposal ID

roundinteger

Round number (1 or 2)

Optional
revisionstring

Revision ID (required for round 2)

Default: null

Save Section Edit

save_section_edit
Full Description

Persist a user's manual edit to a proposal section.

Parameters (3 required)
Required
contentstring

Edited section content

proposal_idstring

Proposal ID

section_pathstring

Section path

Search Grants

search_grants
Full Description

Search Grants

Search for research grants using semantic search with multiple queries.

This tool accepts an ARRAY of search queries and automatically executes all queries, combines the results, and deduplicates them for you.

How to use this tool

FOR SPECIFIC SEARCH QUERIES
  • Provide an array of targeted keywords related to the research area
  • Search is semantic - understands context and intent, not just exact keywords
  • Example: search_grants(queries=["machine learning computer vision", "deep learning neural networks"])
FOR PROFILE-BASED SEARCH

When user asks "find grants" or "grants for my profile":

**MANDATORY WORKFLOW

  • You MUST follow ALL these steps:**

1. **Gather researcher context

  • THIS IS CRITICAL:**

Call get_my_research_context() to get complete researcher profile:

  • Basic info (name, title, institution)
  • Research interests and topics
  • Biosketch (qualifications and experience)
  • CV (complete background)
  • Publications (recent work to understand expertise)
  • Previously written grants (for context)

This single tool call replaces the need to call 6 separate tools and provides all the context needed to generate targeted grant queries.

2. Analyze and identify themes:

  • Extract primary research areas from interests and publications
  • Identify methodologies (e.g., "computational modeling", "field studies", "lab experiments")
  • Note key themes and technical approaches from publications

3. Generate 2-3 DIFFERENT targeted queries:

  • Query 1: Primary research area + methodology
  • Query 2: Specific domain + technical approach
  • Query 3: Alternative angle or subdomain from their work
  • Make each query distinct to capture different relevant opportunities

4. **Execute search with multiple queries

  • THIS TOOL HANDLES DEDUPLICATION:**
  • Call search_grants() ONCE with an array of 2-3 DIFFERENT queries
  • The tool will execute all searches, combine results, and deduplicate automatically
  • Use num_results=20 to get comprehensive results per query
  • Example: search_grants(queries=["cancer immunotherapy", "tumor microenvironment", "CAR-T cell therapy"], num_results=20)

5. Present results with context:

  • Results are already deduplicated by OpportunityID
  • Explain why each grant matches their profile
  • Reference specific publications or expertise areas
  • Prioritize by relevance score and deadline

Example Profile-Based Workflow

User says: "find me grants"

Step 1

  • Call get_my_research_context():
    • This returns a complete context object with all researcher information
    • Includes info, interests, biosketch, CV, publications, and grants
    • Example: context = get_my_research_context(publications_limit=5)

Step 2

  • Analyze the data gathered:
    • Interests: Identify main research topics and domains
    • Publications: Understand methodologies and technical approaches used
    • Biosketch: Note years of experience and career stage
    • Previous grants: Identify funding agencies and award types

Step 3

  • Execute ONE search with 2-3 different queries:
search_grants(
    queries=[
        "[primary research area] [methodology]",
        "[domain] [technical approach]",
        "[alternative angle] [subdomain]"
    ],
    num_results=20
)

The tool automatically combines and deduplicates ~40-60 results from the searches.

Important Rules

  • This tool requires a queries parameter with an array of 1+ search terms
  • For profile-based search: provide 2-3 different queries in the array
  • Each query should use different keywords/angles to maximize coverage
  • Tool handles combining and deduplicating results automatically

Presenting Results to User

When presenting results to user, ALWAYS show:

  • Title (as clickable link using AdditionalInformationURL)
  • Agency
  • Opportunity Number
  • Deadline
  • Funding amount (if available)

Proposal drafting rule (IMPORTANT)

If the user wants to draft a proposal for a grant you found:

  • Do NOT draft a proposal in chat.
  • Do call write_grant_proposal(opportunity_number=...) using the grant’s opportunityNumber from the search results.
  • If the widget provides a stable drafting session key, also include draft_key=... so the same proposal can be resumed after refresh.
Parameters (0 required, 7 optional)
Optional
deadline_afterstring

Deadline after date (YYYY-MM-DD)

Default: null
funderstring

Filter by funder name

Default: null
max_amountnumber

Maximum funding amount USD (must be non-negative)

Default: null
min_amountnumber

Minimum funding amount USD (must be non-negative)

Default: null
num_resultsinteger

Number of results per query

Default: 20
queriesarray

List of search queries for grants (max 20). If not provided and use_profile=True, queries will be auto-generated from the user's research interests.

Default: null
use_profileboolean

If True and queries is empty/not provided, automatically use the user's research interests as search queries. Set to False only if you want to search with explicit queries and ignore the user's profile.

Default: True

Start Proposal Agent

start_proposal_agent
Full Description

Start the background grant writing agent for a proposal.

Parameters (3 required)
Required
intakeobject

Intake payload with rounds and answers

opportunity_numberstring

Grant opportunity number

proposal_idstring

Proposal ID

Submit Section Answers

submit_section_answers
Full Description

Submit user answers for a specific proposal section.

Parameters (3 required)
Required
answersobject

Answer key-value pairs

proposal_idstring

Proposal ID

section_pathstring

Section path

Update Onboarding

update_onboarding
Full Description

Update onboarding profile data.

Parameters (1 required)
Required
updatesobject

Onboarding fields to update (camelCase)

Write Grant Proposal

write_grant_proposal
Full Description

Use this tool when the user requests to write or draft a grant proposal. You must use this tool when the user requests to write a proposal for a grant you found in the search results. This tool will initiate an interactive grant proposal widget to allow the user to interact with the written proposal.

CRITICAL: You MUST use the 'opportunityNumber' field from search_grants results!

  • DO use the 'opportunityNumber' field (like RFA-AI-24-012, PA-24-123, etc.)
  • DO NOT use the 'id' field (UUID like b34682f7-2ccc-52b0-abba-00cb42ee40ca)
  • If a draft_key is available from the widget or a prior tool output, you MUST pass that exact draft_key unchanged.
  • DO NOT invent, modify, or omit a known draft_key when resuming the same proposal session.

Example of CORRECT usage:

  • opportunityNumber='RFA-AI-24-012'
  • opportunityNumber='PA-24-123'
  • write_grant_proposal(opportunity_number='PAR-25-043', draft_key='draft-123')

Example of WRONG usage:

  • opportunity_number='b34682f7-2ccc-52b0-abba-00cb42ee40ca' (this is the id field)
  • write_grant_proposal(opportunity_number='PAR-25-043') when resuming and a draft_key is known
  • write_grant_proposal(opportunity_number='PAR-25-043', draft_key='new-key') if the existing draft_key was different

Some examples of user requests that should trigger this tool:

  • "Please draft a proposal for the grant with opportunity number RFA-AI-72-841"
  • "I would like to write a proposal for the 3rd grant."
  • "Can you write the grant with opportunity number PA-24-123?"
Parameters (1 required, 1 optional)
Required
opportunity_numberstring

MUST be opportunityNumber from search results (NOT the id field)

Optional
draft_keystring

Stable draft session key. If you are resuming a proposal and have a draft_key from the widget or prior tool output, you MUST pass it unchanged so the same proposal can be reopened.