<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: quuin james</title>
    <description>The latest articles on DEV Community by quuin james (@quuin_james_aa5e0481b0d34).</description>
    <link>https://dev.to/quuin_james_aa5e0481b0d34</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4156039%2F595e5a76-2811-451c-bdf2-f44a6d125a37.png</url>
      <title>DEV Community: quuin james</title>
      <link>https://dev.to/quuin_james_aa5e0481b0d34</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/quuin_james_aa5e0481b0d34"/>
    <language>en</language>
    <item>
      <title>An SVG export is not proof of editable scientific labels</title>
      <dc:creator>quuin james</dc:creator>
      <pubDate>Sat, 03 Oct 2026 04:15:59 +0000</pubDate>
      <link>https://dev.to/quuin_james_aa5e0481b0d34/an-svg-export-is-not-proof-of-editable-scientific-labels-im</link>
      <guid>https://dev.to/quuin_james_aa5e0481b0d34/an-svg-export-is-not-proof-of-editable-scientific-labels-im</guid>
      <description>&lt;p&gt;Disclosure: this article is from the LitFigure team and was drafted by an AI agent. It explains file-format checks; it does not report a head-to-head benchmark of figure generators.&lt;/p&gt;

&lt;p&gt;An SVG can contain editable text, outlined glyphs, an embedded raster image, or a mixture. These files share the same extension, but they offer different editing experiences.&lt;/p&gt;

&lt;p&gt;For a research figure, that difference matters when a co-author asks you to fix one protein label, resize a cell, or change a connector after generation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three different things an SVG can contain
&lt;/h2&gt;

&lt;p&gt;Here is a minimal illustration of native text and a native shape:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;svg&lt;/span&gt; &lt;span class="na"&gt;xmlns=&lt;/span&gt;&lt;span class="s"&gt;"http://www.w3.org/2000/svg"&lt;/span&gt; &lt;span class="na"&gt;viewBox=&lt;/span&gt;&lt;span class="s"&gt;"0 0 240 80"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;rect&lt;/span&gt; &lt;span class="na"&gt;x=&lt;/span&gt;&lt;span class="s"&gt;"10"&lt;/span&gt; &lt;span class="na"&gt;y=&lt;/span&gt;&lt;span class="s"&gt;"15"&lt;/span&gt; &lt;span class="na"&gt;width=&lt;/span&gt;&lt;span class="s"&gt;"90"&lt;/span&gt; &lt;span class="na"&gt;height=&lt;/span&gt;&lt;span class="s"&gt;"50"&lt;/span&gt; &lt;span class="na"&gt;rx=&lt;/span&gt;&lt;span class="s"&gt;"10"&lt;/span&gt; &lt;span class="na"&gt;fill=&lt;/span&gt;&lt;span class="s"&gt;"#dceee3"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;text&lt;/span&gt; &lt;span class="na"&gt;x=&lt;/span&gt;&lt;span class="s"&gt;"55"&lt;/span&gt; &lt;span class="na"&gt;y=&lt;/span&gt;&lt;span class="s"&gt;"45"&lt;/span&gt; &lt;span class="na"&gt;text-anchor=&lt;/span&gt;&lt;span class="s"&gt;"middle"&lt;/span&gt; &lt;span class="na"&gt;font-size=&lt;/span&gt;&lt;span class="s"&gt;"14"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;T cell&lt;span class="nt"&gt;&amp;lt;/text&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/svg&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The label exists as a text element. An editor with compatible SVG text support may let you change its characters, although font availability and the editor’s import behavior still matter.&lt;/p&gt;

&lt;p&gt;An outlined label is different: its letters are represented by paths. It can look sharp at different sizes, but changing the word usually means replacing those shapes or adding new text. You cannot conclude that a label is editable text just because it remains sharp when zoomed in.&lt;/p&gt;

&lt;p&gt;An SVG can also embed a raster image through an image element. The file is then an SVG container, but the embedded picture has a fixed pixel resolution. A single SVG may mix all three approaches.&lt;/p&gt;

&lt;h2&gt;
  
  
  Inspect the document in the editor you will actually use
&lt;/h2&gt;

&lt;p&gt;A quick practical check:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open the export in your intended editor.&lt;/li&gt;
&lt;li&gt;Select a label and try to change its characters.&lt;/li&gt;
&lt;li&gt;Select a shape independently of the surrounding illustration.&lt;/li&gt;
&lt;li&gt;Check whether connectors can be changed independently.&lt;/li&gt;
&lt;li&gt;Save, reopen, and inspect the result at its intended print size.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Selecting a group is not the same as selecting a semantic object. An imported object may contain many paths that are technically movable, while being impractical to revise as a cell or a connector.&lt;/p&gt;

&lt;p&gt;This distinction also applies to PPTX. A slide can contain native shapes and text, a single embedded picture, or a mixture. The format being supported does not mean every element retains meaningful editability.&lt;/p&gt;

&lt;h2&gt;
  
  
  Separate a revision request from proof that it worked
&lt;/h2&gt;

&lt;p&gt;When evaluating an AI figure workflow, keep the original version and request one specific change: for example, replace a label without changing the rest of the layout. Inspect the whole result afterward. A conversational revision may redraw details outside the requested change.&lt;/p&gt;

&lt;p&gt;For a scientific illustration, compare labels and relationships against your source material as well as your visual brief. Conceptual illustrations should not acquire invented measurements or efficacy claims during revision.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we document in LitFigure
&lt;/h2&gt;

&lt;p&gt;LitFigure offers PNG downloads, on-demand SVG conversion and PPTX for supported editable documents. Converted SVG labels may be outlined. Those boundaries are described in our &lt;a href="https://litfigure.com/help#exports" rel="noopener noreferrer"&gt;export guide&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We also prepared a &lt;a href="https://litfigure.com/blog/choose-scientific-figure-tool" rel="noopener noreferrer"&gt;scientific figure workflow comparison&lt;/a&gt; covering LitFigure, SciDraw, BioRender and FigPad. It uses linked public product descriptions and distinguishes advertised capabilities from workflows we have actually tested.&lt;/p&gt;

&lt;p&gt;When choosing a tool, inspect the exported artifact as carefully as the generated preview. A useful next revision depends on the contents of the file, not just its extension.&lt;/p&gt;

</description>
      <category>design</category>
    </item>
    <item>
      <title>How to Ground Claude or Codex in Inspectable Biomedical Evidence with MCP</title>
      <dc:creator>quuin james</dc:creator>
      <pubDate>Fri, 02 Oct 2026 00:55:30 +0000</pubDate>
      <link>https://dev.to/quuin_james_aa5e0481b0d34/how-to-ground-claude-or-codex-in-inspectable-biomedical-evidence-with-mcp-4jd7</link>
      <guid>https://dev.to/quuin_james_aa5e0481b0d34/how-to-ground-claude-or-codex-in-inspectable-biomedical-evidence-with-mcp-4jd7</guid>
      <description>&lt;p&gt;MCP makes it easy to give an AI assistant another tool. The harder problem in research is knowing what the tool actually established. In this walkthrough, I’ll connect LitSource to an MCP-compatible client, find biomedical papers for one claim, verify a short reference list, and keep the distinction between “a paper exists” and “the paper supports this sentence.”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Disclosure:&lt;/strong&gt; I work on LitSource. This article was drafted by an AI agent using live tool calls and source inspection. The tool results below came from live LitSource MCP calls in a Codex conversation on October 1, 2026. The Claude Code instructions are documented setup guidance; I did not test a fresh Claude sign-in in this session. This is a research-tool demonstration, not treatment advice.&lt;/p&gt;

&lt;h2&gt;
  
  
  A real DOI can still be the wrong evidence
&lt;/h2&gt;

&lt;p&gt;Here is a deliberately overstrong claim to test:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Semaglutide produces permanent weight loss after treatment is discontinued in adults with overweight or obesity.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The exercise is to inspect evidence and revise the sentence. A DOI resolver alone cannot do that. It can identify a paper without establishing its relevance, the direction of its findings, or the limits of its follow-up.&lt;/p&gt;

&lt;p&gt;Keep three decisions separate:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Decision&lt;/th&gt;
&lt;th&gt;What you need to inspect&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Does the record exist?&lt;/td&gt;
&lt;td&gt;DOI or PMID and bibliographic metadata&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Does it address the sentence?&lt;/td&gt;
&lt;td&gt;Population, treatment, comparator, outcome and timing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Is the wording justified?&lt;/td&gt;
&lt;td&gt;Source passage, study design and uncertainty&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Connect the client, then make a free call
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://litsource.net/integrations/mcp?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=biomedical_mcp_20261001&amp;amp;utm_content=setup" rel="noopener noreferrer"&gt;LitSource MCP landing page&lt;/a&gt; links to the client-specific guides. The endpoint is &lt;code&gt;https://litsource.net/mcp&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Sign in to LitSource and create a separate Agent Token for this client. Grant &lt;code&gt;usage:read&lt;/code&gt; for the connection check, &lt;code&gt;evidence:search&lt;/code&gt; for retrieval, &lt;code&gt;references:verify&lt;/code&gt; for reference checks, and optionally &lt;code&gt;runs:read&lt;/code&gt; to reopen saved results. Grant only what you plan to use. Keep the token out of chats, screenshots and version control.&lt;/p&gt;

&lt;p&gt;For Codex, put this configuration in your local &lt;code&gt;~/.codex/config.toml&lt;/code&gt; and supply the token through the named environment variable before starting the client:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="nn"&gt;[mcp_servers.litsource]&lt;/span&gt;
&lt;span class="py"&gt;url&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"https://litsource.net/mcp"&lt;/span&gt;
&lt;span class="py"&gt;bearer_token_env_var&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"LITSOURCE_AGENT_TOKEN"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run &lt;code&gt;codex mcp list&lt;/code&gt; to inspect the configuration. The bearer-token setting is documented in the &lt;a href="https://learn.chatgpt.com/docs/extend/mcp?surface=cli" rel="noopener noreferrer"&gt;official Codex MCP guide&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For Claude Code, follow the &lt;a href="https://litsource.net/docs/mcp" rel="noopener noreferrer"&gt;LitSource connection guide&lt;/a&gt; and &lt;a href="https://code.claude.com/docs/en/mcp" rel="noopener noreferrer"&gt;Claude Code's remote HTTP instructions&lt;/a&gt;. Use a private local configuration for authentication; do not commit a project configuration containing an Authorization token. Confirm the server with &lt;code&gt;/mcp&lt;/code&gt; or &lt;code&gt;claude mcp get litsource&lt;/code&gt;. These instructions concern Claude Code; they do not establish a one-click Claude web marketplace listing.&lt;/p&gt;

&lt;p&gt;Now ask:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Call litsource_get_usage and tell me whether authentication succeeded.
Do not run a paid search yet.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That call succeeded in this session and charged zero LitSource credits. It checks the connection and usage permission; it does not prove every other tool or scope will work. Your AI-client subscription and LitSource credits are separate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Search the sentence, keeping disagreement visible
&lt;/h2&gt;

&lt;p&gt;The live request used:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"query"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Semaglutide produces permanent weight loss after treatment is discontinued in adults with overweight or obesity."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"max_hits"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"rerank"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"request_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"outreach-dev-20261001-semastop-01"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This returned three hits and charged one credit. For your own new operation, choose a new &lt;code&gt;request_id&lt;/code&gt;; reuse a key only when retrying the identical request.&lt;/p&gt;

&lt;p&gt;Ask the assistant to organize, rather than silently strengthen, the result:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Show each paper's DOI/PMID, source passage and study context.
Separate support, partial support, conflict and uncertainty.
Preserve disagreements between tool fields. Do not decide from a score alone.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The first two returned hits had &lt;code&gt;stance: against&lt;/code&gt;. A third returned a methods/search passage and was marked &lt;code&gt;uncertain&lt;/code&gt;; I did not use that passage as an outcome finding.&lt;/p&gt;

&lt;p&gt;There was also a useful imperfection: one hit paired &lt;code&gt;supportType: direct_support&lt;/code&gt; with &lt;code&gt;stance: against&lt;/code&gt;. Another paired &lt;code&gt;related_background&lt;/code&gt; with &lt;code&gt;against&lt;/code&gt;. I retained those fields and checked the source instead of letting the assistant turn the labels into a single green checkmark. Automated classifications are review aids.&lt;/p&gt;

&lt;h2&gt;
  
  
  Open the source before editing the claim
&lt;/h2&gt;

&lt;p&gt;The STEP 1 extension record has DOI &lt;code&gt;10.1111/dom.14725&lt;/code&gt; and PMID &lt;code&gt;35441470&lt;/code&gt;. I opened the &lt;a href="https://pmc.ncbi.nlm.nih.gov/articles/PMC9542252/" rel="noopener noreferrer"&gt;full original article on PMC&lt;/a&gt;. Its exploratory extension followed 327 participants; one year after semaglutide and lifestyle intervention stopped, much of the prior loss had returned. Stopping both interventions and the selected extension cohort constrain interpretation.&lt;/p&gt;

&lt;p&gt;A defensible correction for this example is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In the STEP 1 exploratory extension, substantial weight regain occurred during the year after semaglutide and lifestyle intervention were discontinued.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That sentence has a study, an observation window and an explicit treatment context. It avoids claiming permanence or generalizing to every patient. The review decision in this demonstration was to replace the original sentence after inspecting the article. A researcher still needs to review that interpretation before using it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check a short reference list separately
&lt;/h2&gt;

&lt;p&gt;I then called &lt;code&gt;litsource_verify_references&lt;/code&gt; with two versions of the same STEP 1 extension citation. The second deliberately changed the supplied publication year from 2022 to 2019 while retaining the title and DOI. This is a controlled demonstration, not a reported customer mistake.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Submitted version&lt;/th&gt;
&lt;th&gt;Observed result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Correct citation, 2022, DOI &lt;code&gt;10.1111/dom.14725&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;decision: verified&lt;/code&gt;; no mismatch fields&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Same title and DOI, deliberately changed to 2019&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;decision: unverified&lt;/code&gt;; &lt;code&gt;mismatchFields: ["year"]&lt;/code&gt;; matched record year 2022&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The two-reference call charged three credits. The returned reason identified a publication-year conflict. I would correct the metadata and recheck it against the journal record. I would not call this a fabricated paper: the candidate record exists.&lt;/p&gt;

&lt;h2&gt;
  
  
  Preserve the audit trail and protect the input
&lt;/h2&gt;

&lt;p&gt;Save the exact sentence, tool request, source identifiers, passages, output fields and your keep/revise/remove decision. A saved-run ID helps reopen an owned result when your token has permission; it is not a public article URL or independent review.&lt;/p&gt;

&lt;p&gt;LitSource stores search inputs, submitted references, results and usage records for saved runs. Your AI client receives tool results and has its own data policies. Use public examples for demos, and follow your institution's requirements before sending unpublished manuscript text or identifiable patient information. Revoke a client token when you stop using it. See the &lt;a href="https://litsource.net/privacy-policy" rel="noopener noreferrer"&gt;LitSource privacy policy&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The final habit is small: check the original source each time the sentence matters. The &lt;a href="https://litsource.net/blog/spot-fake-citations-3-minute-checklist?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=biomedical_mcp_20261001&amp;amp;utm_content=checklist" rel="noopener noreferrer"&gt;three-minute citation checklist&lt;/a&gt; gives you a repeatable starting point. A matching citation and a supported claim are separate decisions, and MCP can help preserve the material you need to make both.&lt;/p&gt;

</description>
      <category>mcp</category>
    </item>
  </channel>
</rss>
