Research Methods Library
The Research Methods Library is a free, read-only MCP server that grounds AI assistants in ~17,000 sections from 8 books, an R package, and research articles on research methods, statistics, causal inference, econometrics, machine learning, and AI.
search— find sections across all works by keyword, with optional filters for one work or code language; returns ids, links, snippets, code languages, and citations.fetch— read any section in full by id, including its code, URL, and citation (long sections paginated).choose_method— match a research question to 62 curated methods, with when each applies, key assumptions, R/Python packages, and readings.get_code— get runnable R, Python, or Julia code for a named estimator, test, or modeling step, with the packages used and a citation.cite— format references in APA, Chicago, MLA, Harvard, BibTeX, or RIS, deduplicated by work.list_sources— list every work with its topics, code languages, section counts, license, links, and citation info.Prompts (
plan_analysis,write_methods_section,explain_method) and resources (library catalog, per-work tables of contents) are also provided.Access is free with no account or API key, and it works with Claude, ChatGPT, Amazon Bedrock AgentCore, Cursor, VS Code, and other MCP clients.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Research Methods LibraryStates raised the minimum wage in different years. How do I estimate the effect on teen employment?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
The Research Methods Library is a Model Context Protocol (MCP) server. Given a research question, it recommends candidate designs, states their identifying assumptions, returns runnable R and Python code, and supplies a formatted citation for every source consulted. Its index contains approximately 17,000 sections from 8 books, an R package, and the author's research articles (listed under Sources) covering causal inference, econometrics, experimental design, marketing research, credit scoring, machine learning, and artificial intelligence.
The server works with Claude, ChatGPT, Amazon Bedrock AgentCore, Cursor, Visual Studio Code, and any other MCP-compatible client. Access is free and requires no account or API key.
Installation
Endpoint: https://research-methods-mcp.vercel.app/mcp. Access is free and requires no account or API key.
Client | Configuration |
Claude (web, desktop, and mobile) | Settings → Connectors → Add custom connector; enter the endpoint |
Claude Code |
|
ChatGPT | Settings → enable developer mode → add a custom connector of type MCP server with the endpoint and no authentication |
Amazon Bedrock AgentCore | Add the endpoint as an MCP server target of an AgentCore Gateway, with no outbound authorization: |
Cursor, Visual Studio Code | Use the buttons above |
Windsurf, Cline, Zed, and other clients | Add the following JSON to the client's MCP configuration |
{
"mcpServers": {
"research-methods": {
"url": "https://research-methods-mcp.vercel.app/mcp"
}
}
}Related MCP server: Cognitive Canvas
Example queries
States raised the minimum wage in different years. How do I estimate the effect on teen employment?
For this query the assistant calls choose_method, which returns staggered difference-in-differences together with its scope conditions, the reason a conventional two-way fixed-effects regression can be biased when treatment effects are heterogeneous, the assumptions to verify, implementations in R (did, fixest, didimputation, HonestDiD) and Python (csdid, pyfixest, differences), and the relevant readings.

Give me Python code for a probability-of-default model with gradient boosting.
Only California passed the law and I have 30 years of state data. What can I do?
Write the methods section for my regression discontinuity and give me BibTeX for the sources.
Each response links to the specific section consulted and carries the citation of the work from which it is drawn.
Tools
Tool | What it does |
| Matches a research question to methods, with when to use each, key assumptions, R and Python packages, and readings. 62 curated methods. |
| Finds sections across all works, with links, snippets, code languages, and a citation. Compatible with ChatGPT deep research. |
| Reads a section in full, with its code, link, and citation. Compatible with ChatGPT deep research. |
| Runnable R, Python, or Julia code for a task, with the packages it uses. |
| References in APA, Chicago, MLA, Harvard, BibTeX, or RIS for the sections consulted, deduplicated by work. |
| The works in the library (textbooks, an R package, and research articles), with topics, languages, licenses, and links. |
Prompts (slash commands in clients that support them): plan_analysis, write_methods_section, explain_method. Resources: the library catalog and a table of contents for each work.
All tools are read-only. The server makes no calls to language models and stores no information about its users; see the privacy policy.
Sources
Work | Code | Sections | Served | License |
Python, R | 1,611 | Full text | CC BY-NC-SA 4.0 | |
R | 1,163 | Full text and function reference | GPL-3.0 | |
Python | 2,578 | Full text | CC BY 4.0 text, MIT code | |
Python, R | 1,820 | Excerpts and code; full text on the website | All rights reserved text, MIT code | |
Julia, Python | 5,750 | Excerpts and code; full text on the website | All rights reserved | |
Python, R | 1,844 | Full text | CC BY 4.0 | |
Python | 1,334 | Excerpts and code; full text on the website | All rights reserved | |
Python | 1,309 | Excerpts and code; full text on the website | All rights reserved | |
Python | 361 | Full text | CC BY-SA 4.0 | |
— | 7 | Abstracts, DOIs, and citations | Publishers' terms |
Sections of A Guide on Data Analysis that appear in the Springer print volumes are cited as their published chapter, then the volume. For example, a section on causal inference is cited as Nguyen, M. (2025). Causal inference. In Experimental design (Vol. 4, pp. 7–48). Springer Cham. https://doi.org/10.1007/978-3-032-01839-7_2, in Nguyen, M. (2025). Experimental design (Vol. 4). Springer Cham. https://doi.org/10.1007/978-3-032-01839-7
Method
The source files of each work (.Rmd, .qmd, .Rd) are parsed into a single index of sections, code blocks, and citations. During index construction every link is verified against the published website: a section whose anchor is absent links to its chapter page, and unpublished pages are excluded. Queries are answered from the in-memory index; no database or language model is involved.
Self-hosting
docker build -t research-methods-mcp .
docker run -p 8080:8080 research-methods-mcp # http://localhost:8080/mcpOr with Node.js: npm ci && npm run build && npm start (listens on 127.0.0.1:8787; set HOST and PORT to change). The same handler runs on Vercel through api/index.mjs and vercel.json (the hosted endpoint) and on Deno Deploy through src/deno.ts.
Development
npm ci
npm run build:index # parse the book repositories (sibling folders) into data/index.json.gz
npm run build # bundle dist/stdio.js and dist/http.js
npm test # end-to-end tests through real MCP clients
npm run check-links # audit every link in the index against the live sitesTo add a book, add an entry to sources.yml and rebuild the index. To add or tune a method, edit methods.yml; the build fails if a method points at a section that does not exist.
Citation
Users are asked to cite the works they draw on; the cite tool formats the references. To cite the server itself, see CITATION.cff.
License
The server code is MIT licensed. The content it returns keeps each work's own license, listed above and by the list_sources tool.
Available Tools
6 toolschoose_methodRecommend analysis methodsARead-onlyIdempotentInspect
Recommend statistical, econometric, causal inference, or machine learning methods for a research question or data analysis task: which statistical test or model fits the data, how to estimate a causal or treatment effect, how to analyze an A/B test or experiment, how many observations are needed (power and sample size), how to handle panel, time-series, survey, text, or survival data, and how to build predictive or credit-scoring models. Describe the question, the data (cross-section, panel, time series, experiment), how the treatment or exposure was assigned, and the outcome. Returns candidate methods with when each applies, key assumptions, R and Python packages, and the library sections that teach them.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of methods (default 3). | |
| language | No | Only list packages for this language. | |
| question | Yes | The research question and setting, e.g. "effect of a minimum wage increase that some states adopted in different years on teen employment". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a read-only, idempotent, non-destructive, closed-world operation, so the safety profile is covered. The description adds value beyond that by disclosing the return shape: candidate methods with applicability conditions, key assumptions, R/Python packages, and pointers to library sections. It does not discuss limits (e.g., the default of 3 results) beyond what the schema states.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is a single dense paragraph but is well front-loaded: purpose and task families come first, input requirements next, return contents last. Every clause adds a distinct capability, though the length borders on an enumeration dump rather than tight prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by describing what is returned (methods, applicability, assumptions, packages, library sections). Inputs are fully documented in the schema, and the annotations carry the safety profile, so nothing an agent needs to invoke this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema by specifying the content the 'question' parameter should carry (data type, assignment mechanism, outcome) rather than only the schema's single example. It also implicitly ties the 'language' parameter to the packages returned.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (recommend) and resource (statistical, econometric, causal inference, or ML methods) and enumerates the concrete task families it covers, from test selection to power analysis to predictive modeling. An agent can tell instantly that this tool maps a research question to candidate methods, distinct from the search/fetch/cite siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear when-to-use coverage by enumerating the triggering scenarios ('which statistical test or model fits the data', 'how to estimate a causal or treatment effect', 'how to analyze an A/B test'), and it specifies what the caller must describe (question, data structure, treatment assignment, outcome). It names no exclusions or alternative tools, but the sibling set contains no competing recommender, so context is otherwise unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
citeFormat referencesARead-onlyIdempotentInspect
Format references for works in the library in APA, Chicago, MLA, Harvard, BibTeX, or RIS. Pass the ids of the sections you used to get a deduplicated reference list plus the section links, or pass source ids to cite whole works. With no ids, returns a reference for every work in the library.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Section ids, or source ids: data_analysis, causalverse, credit_score, marketing_research, ai_in_action, advanced_data_analysis, tidy_finance_vn, tidy_finance_vn_vi, mlpy, publications. | |
| style | No | Citation style (default apa). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds genuinely new behavior: deduplication of overlapping section citations, inclusion of section links, and the default all-works behavior when ids are omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core action and supported styles, followed by the id semantics and the no-id fallback. Every sentence carries information, though the middle sentence is dense enough to require a second read.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still conveys what comes back (a reference list, deduplicated, with section links, or one reference per work). Combined with the fully documented two-parameter schema, an agent has everything needed to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema lacks: it explains that "ids" can be either section ids (yielding deduped references plus links) or source ids (citing whole works). It also confirms the default style when none is passed, which the schema only parenthetically notes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Format references for works in the library") and enumerates the supported styles, so an agent knows exactly what it produces. It does not explicitly differentiate itself from siblings like list_sources or search, so it falls just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly lays out the three invocation modes: pass section ids to get a deduplicated list plus links, pass source ids to cite whole works, or pass nothing to get every work. It gives strong context for each mode but names no exclusions or alternative tools for related needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetchRead a library sectionARead-onlyIdempotentInspect
Read one section of the library by its section id. Returns the section in Markdown with its code, the section URL, and the citation of the work it comes from. Long sections come in parts; the text names the id of the next part.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Section id, e.g. "data_analysis:sec-regression-discontinuity". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world, so the safety profile is covered. The description adds real behavioral context beyond them: the return is Markdown containing code, a section URL and a citation, and long sections are paginated with the next part's id named in the text. It omits any error behavior for bad ids.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each doing distinct work: purpose, return shape, pagination. The purpose is front-loaded and there is no filler or repetition of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema present, the description correctly carries the return-value burden by naming the Markdown payload, URL and citation, and it explains the pagination contract an agent needs to fetch subsequent parts. It is nearly complete for a one-parameter read tool, lacking only failure-mode guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single required parameter whose schema description already includes a concrete example id at 100% coverage. The description only restates that the section id is the lookup key, adding no format or syntax detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Read one section of the library by its section id") and immediately scopes it, which separates it from broad siblings like search. It does not explicitly contrast itself with get_code or cite, so differentiation is implied rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase "by its section id" implies the precondition for calling it, and the note about long sections arriving in parts with a next-part id is genuinely actionable usage guidance. However, it never says when to use this instead of get_code or search, nor what to do when an id is unknown.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_codeGet runnable R, Python, or Julia codeARead-onlyIdempotentInspect
Get runnable code from the library for a specific statistical, econometric, causal inference, or machine learning task, in R, Python, or Julia. Suited to requests for code that carries out a named estimator, test, or modeling step; it returns code with brief context, not an explanation of the method. Results can be restricted to one language or one work. Returns code blocks with the section they come from, the packages they use, a link, and a citation.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of sections to return code from (default 4). | |
| topic | Yes | The task, e.g. "Callaway and Sant'Anna group-time ATT", "rdrobust bandwidth", "WoE binning scorecard". | |
| source | No | Limit to one work: data_analysis (A Guide on Data Analysis); causalverse (causalverse: The All-in-One Causal Inference Toolkit); credit_score (Credit Scoring: Theory, Methods, and Practice); marketing_research (Marketing Research: A Technical and Academic Treatment); ai_in_action (AI in Action: A Reference for Artificial Intelligence); advanced_data_analysis (Advanced Data Analysis); tidy_finance_vn (Applying Tidy Finance with Python to Vietnam); tidy_finance_vn_vi (Tài Chính Ứng Dụng với Python); mlpy (Machine Learning in Python); publications (Research Articles and Publications). | |
| language | No | Programming language of the code: r, python, or julia. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful behavior beyond that: results can be restricted to one language or one work, and the return payload includes the originating section, packages, a link, and a citation — valuable since no output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, front-loaded with the core action and scope, then the usage boundary, then the return shape. No filler, though the middle clause is slightly run-on and could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly compensates by describing the return payload (code blocks plus section, packages, link, citation) and the restriction options. Together with the 100%-covered schema and clarifying annotations, an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including detailed enum labels for every source work, so the schema already carries the parameter meaning. The description only restates the language/work restriction at a high level and adds no syntax or format detail beyond the schema; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Get runnable code from the library') with an explicit scope (statistical, econometric, causal inference, or ML tasks) and language range. It also draws the boundary against an explanation-style sibling by saying it 'returns code with brief context, not an explanation of the method,' which lets an agent separate it from choose_method.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear positive trigger: 'Suited to requests for code that carries out a named estimator, test, or modeling step.' It also states a negative condition (not an explanation of the method), but never names the alternative tool (e.g., choose_method) or when to prefer it, stopping short of a full when/when-not/alternatives statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sourcesList the works in the libraryARead-onlyIdempotentInspect
List the works in the library (textbooks, an R package, and research articles) with their topics, code languages, section counts, licenses, links, and how to cite each one. Suited to questions about what the library covers or which work to consult. Takes no parameters and returns one entry per work.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so safety is covered structurally. The description still adds real behavior beyond that: no parameters are required and the call returns one entry per work, which tells the agent the result granularity in the absence of an output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, zero filler: the field enumeration, the usage context, and the calling/return behavior each carry weight. The purpose and scope are front-loaded in the first clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter, read-only list tool with no output schema, the description compensates by naming the returned fields and the return granularity (one entry per work). Nothing an agent needs to decide whether and how to call it is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so the baseline is 4. The description correctly states 'takes no parameters,' which is consistent with the empty schema and prevents an agent from hunting for filter arguments.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (list the works in the library) and enumerates exactly what each entry contains — topics, code languages, section counts, licenses, links, citation info — so an agent knows the shape of the result. It does not explicitly name a sibling (search, fetch, get_code) to contrast against, so differentiation is implied rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Suited to questions about what the library covers or which work to consult" gives a clear use context and implicitly rules out the lookup-oriented siblings like get_code or cite. There is no explicit when-not-to-use statement or named alternative, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchSearch the research methods libraryARead-onlyIdempotentInspect
Search sections of textbooks and an R package on research methods and data analysis: statistics and hypothesis testing, regression and generalized linear models, causal inference (difference-in-differences, synthetic control, regression discontinuity, instrumental variables, matching, double machine learning), econometrics, experimental design, survey methods, marketing research, credit scoring, machine learning, and AI. Returns matching sections with their ids, a link, a snippet, the code languages they contain, and a citation.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of results (default 8). | |
| query | Yes | What to look for, in plain words, e.g. "staggered difference-in-differences with never-treated controls". | |
| source | No | Limit to one work: data_analysis (A Guide on Data Analysis); causalverse (causalverse: The All-in-One Causal Inference Toolkit); credit_score (Credit Scoring: Theory, Methods, and Practice); marketing_research (Marketing Research: A Technical and Academic Treatment); ai_in_action (AI in Action: A Reference for Artificial Intelligence); advanced_data_analysis (Advanced Data Analysis); tidy_finance_vn (Applying Tidy Finance with Python to Vietnam); tidy_finance_vn_vi (Tài Chính Ứng Dụng với Python); mlpy (Machine Learning in Python); publications (Research Articles and Publications). | |
| language | No | Prefer sections with code in this language. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=true, idempotent=true, destructive=false and closed-world, so the safety profile is covered. The description adds genuinely new context by disclosing the return shape (ids, link, snippet, contained code languages, citation) which, with no output schema present, is the only place an agent learns what comes back.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Structure is front-loaded: purpose first, return contract second. The long parenthetical topic list is verbose but earns its place as discovery vocabulary for a broad corpus. Two sentences, no filler, only mild bloat in the enumeration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only search tool with full schema coverage and no output schema, the description supplies both the corpus scope and the return contract, which is everything an agent needs to invoke it correctly. No annotated safety behavior or parameter is left unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the enumerated source/language values are fully documented in the schema, so the description does not need to compensate. It adds nothing about how limit interacts with ranking or how language acts as a preference rather than a hard filter, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (search) and resource (sections of textbooks and an R package on research methods/data analysis), and enumerates the topical corpus, so an agent knows exactly what is being searched. It does not, however, distinguish itself from siblings like get_code or cite, which also surface library content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the topic inventory and the query parameter example ('staggered difference-in-differences with never-treated controls'), which signals the intended retrieval use case. There is no explicit when-to-use versus when-not guidance, and no sibling (get_code, cite, choose_method) is named as the alternative for adjacent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
v0.1.1- Changed
cite1 field changed- changed
Input schema / properties / ids / descriptionPrevious value: -"Section ids from other tools, or source ids: data_analysis, causalverse, credit_score, marketing_research, ai_in_action."New value: +"Section ids, or source ids: data_analysis, causalverse, credit_score, marketing_research, ai_in_action, advanced_data_analysis, tidy_finance_vn, tidy_finance_vn_vi, mlpy, publications."
- Changed
get_code2 fields changed- changed
Input schema / properties / source / descriptionPrevious value: -"Limit to one work: data_analysis (A Guide on Data Analysis); causalverse (causalverse: The All-in-One Causal Inference Toolkit); credit_score (Credit Scoring: Theory, Methods, and Practice); marketing_research (Marketing Research: A Technical and Academic Treatment); ai_in_action (AI in Action: A Reference for Artificial Intelligence)."New value: +"Limit to one work: data_analysis (A Guide on Data Analysis); causalverse (causalverse: The All-in-One Causal Inference Toolkit); credit_score (Credit Scoring: Theory, Methods, and Practice); marketing_research (Marketing Research: A Technical and Academic Treatment); ai_in_action (AI in Action: A Reference for Artificial Intelligence); advanced_data_analysis (Advanced Data Analysis); tidy_finance_vn (Applying Tidy Finance with Python to Vietnam); tidy_finance_vn_vi (Tài Chính Ứng Dụng với Python); mlpy (Machine Learning in Python); publications (Research Articles and Publications)." - changed
Input schema / properties / source / enumPrevious value: -[ - "data_analysis", - "causalverse", - "credit_score", - "marketing_research", - "ai_in_action" -]New value: +[ + "data_analysis", + "causalverse", + "credit_score", + "marketing_research", + "ai_in_action", + "advanced_data_analysis", + "tidy_finance_vn", + "tidy_finance_vn_vi", + "mlpy", + "publications" +]
- Changed
search2 fields changed- changed
Input schema / properties / source / descriptionPrevious value: -"Limit to one work: data_analysis (A Guide on Data Analysis); causalverse (causalverse: The All-in-One Causal Inference Toolkit); credit_score (Credit Scoring: Theory, Methods, and Practice); marketing_research (Marketing Research: A Technical and Academic Treatment); ai_in_action (AI in Action: A Reference for Artificial Intelligence)."New value: +"Limit to one work: data_analysis (A Guide on Data Analysis); causalverse (causalverse: The All-in-One Causal Inference Toolkit); credit_score (Credit Scoring: Theory, Methods, and Practice); marketing_research (Marketing Research: A Technical and Academic Treatment); ai_in_action (AI in Action: A Reference for Artificial Intelligence); advanced_data_analysis (Advanced Data Analysis); tidy_finance_vn (Applying Tidy Finance with Python to Vietnam); tidy_finance_vn_vi (Tài Chính Ứng Dụng với Python); mlpy (Machine Learning in Python); publications (Research Articles and Publications)." - changed
Input schema / properties / source / enumPrevious value: -[ - "data_analysis", - "causalverse", - "credit_score", - "marketing_research", - "ai_in_action" -]New value: +[ + "data_analysis", + "causalverse", + "credit_score", + "marketing_research", + "ai_in_action", + "advanced_data_analysis", + "tidy_finance_vn", + "tidy_finance_vn_vi", + "mlpy", + "publications" +]
6 tool updates
v0.1.0- First observed
choose_method - First observed
cite - First observed
fetch - First observed
get_code - First observed
list_sources - First observed
search
TDQS
Scored across 6 tools
Each tool has a clearly distinct role: list_sources enumerates works, search finds sections, fetch reads a section, choose_method recommends methods, get_code returns runnable code, and cite formats references. The potential overlap between search, choose_method, and get_code is well separated by description (finding vs. recommending vs. code retrieval). No two tools appear to do the same thing.
All names are snake_case and verb-led, which is predictable and readable. However, some follow a strict verb_noun pattern (list_sources, choose_method, get_code) while others are bare verbs (search, fetch, cite), a minor deviation from the stated convention.
Six tools cleanly cover the library's consultation workflow—discovery, retrieval, method recommendation, code access, and citation. Each tool earns its place with no redundancy or padding.
As a read-only reference library, the surface covers discovery (list_sources, search), retrieval (fetch), guidance (choose_method), code (get_code), and citation (cite) with no dead ends. The lifecycle for consulting a research methods library is fully covered.
Maintenance
Related MCP Connectors
A statistical analyst in your AI chat: bring data and a question, get a citable, re-runnable report.
Search peer-reviewed papers and research methodology guidance from your AI agent.
- DaggyOAuthcom.daggydata
Query your data in plain English or SQL, build datasets, and fit Bayesian models.
Academic papers, reference verification and research data for AI agents.
Related MCP Servers
- AlicenseCqualityNot gradedmaintenanceAI-powered quantitative research assistant with 45 tools for causal inference methods (DID, RDD, IV, PSM), regression analysis, power calculations, and statistical code generation in R, Stata, and Python.50-
- AlicenseNot gradedqualityDmaintenanceTransforms AI assistants into research-grade cognitive workspaces with systematic reasoning, evidence-based analysis, persistent memory management, and intelligent knowledge discovery.MIT
- AlicenseAqualityDmaintenanceAn MCP server that enables AI assistants to call statistician's decision logic for recommending statistical tests, checking assumptions, interpreting results, and planning sample sizes.6MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI-native statistical analysis and reproducible research workflows through MCP, including natural language planning, protocol-based analysis, Python/R cross-validation, and publication-ready figure generation.MIT