Friday Features: Markdown Paste Formatting Now Supported in Coda and Grammarly Docs

Hey

Welcome to Friday Features, a Friday(ish) roundup where we share what shipped, what’s coming, and occasionally a few things that are delightfully off-topic.

The goal is to establish a regular rhythm: instead of product updates scattered across threads and “wait, when did that happen?” moments, we’ll gather them here so you can quickly scan what’s new before heading into the weekend.

What you can expect in Friday Features:

  • Recently shipped product updates (big and small)
  • Early hints at what we’re working on next
  • Quality-of-life improvements that quietly make things better
  • The occasional curveball, tangent, or Friday-energy detour

Let’s kick off with a small but mighty improvement: Markdown formatting.

We’ve just rolled out improved Markdown paste behavior in Coda and Grammarly Docs, and it’s now live for all users.

What’s changed?

Previously, when you pasted Markdown into Coda, the raw syntax (like ##, **, and backticks) would appear as text. Now, Markdown pastes as formatted content by default, with flexible options depending on how you want to use it.

When you paste Markdown using Cmd/Ctrl + V, Coda will:

  • Automatically format the text
  • Show a small menu next to the pasted content that lets you:
    • Keep the formatted text
    • Paste as plain text
    • Paste as a Markdown code block

If you want to skip formatting entirely, you can still use Cmd/Ctrl + Shift + V to paste as plain text. Check out the GIF at the bottom of this post to see it in action.

This behavior currently works in:

  • Canvas
  • Table cells
  • Canvas
  • Callouts

(You may see slight differences depending on what formatting is supported in each location.)

Why it matters

A growing amount of content, especially from LLMs, developer tools, and knowledge bases, is written in Markdown. This update makes it much easier to bring that content into Coda cleanly, without extra cleanup, while still giving you full control over how it’s pasted.

Hope you enjoy, and please let us know your thoughts!

Markdown demo

27 Likes

Yay!

What’s next? Allowing (and interpreting) markdown in your API as well when adding a row?

4 Likes

Oddly, this is exactly what went through my mind when I saw Markdown Paste. This is awesome, and it works really well even with complex and lengthy Markdown content. Codans are back!

While I’m completely thrilled with this feature addition, I get the sense that it was added now because your own AI teams required it. ergo…

Indeed, but let’s not forget, the vast sentiment expressed by Makers IN THIS COMMUNITY since 2019 who knew, and shouted that Markdown was important. Your Makers know precisely what is needed well in advance, and we were ignored for almost a decade. Superhuman just needs to pay attention. ergo …

If you want to know what will be important in 2030, just as a few Makers.

BTW, I’m old enough to remember John Gruber explaining his concept for Markdown in 1999 at the XML Expo in Philadelphia. It didn’t become a thing until 2006 (I think). Who knew Markdown would become the thing that drives AI twenty years before generative AI? Oh, wait. Coda Makers did LONG BEFORE becoming Makers. :wink:

3 Likes

Great question — it’s already possible via Coda MCP!

The Coda MCP Server supports both reading and writing Markdown through its own API (which I believe is a superset of Coda API).

:open_book: Reading Content as Markdown

Using the page_read tool with contentTypesToInclude: ["pageContentMarkdown"], you can extract any Coda page content as clean Markdown:

{
  "docId": "ZV3-yvDhLC",
  "pageId": "FvKvbE",
  "contentTypesToInclude": ["pageContentMarkdown"]
}

Returns:

# Test...

- **DocID:** `123`

:writing_hand: Writing Markdown-Formatted Content

The content_modify tool supports inserting Markdown that gets parsed and rendered as rich text:

{
  "docId": "ZV3-yvDhLC",
  "canvasId": "canvas-3x69FvKvbE",
  "operations": [{
    "operation": "insert_element",
    "blockType": "markdown",
    "position": "after",
    "content": "## Heading\n\nThis is **bold** and *italic* with `inline code`.\n\n- Bullet one\n- Bullet two"
  }]
}

This parses the Markdown and inserts it as properly formatted Coda content — headings, bold, italic, code, lists, and all!

:bar_chart: Current MCP Markdown Capabilities

Operation Markdown Support
Read (page_readpageContentMarkdown) :white_check_mark: Exports content as Markdown
Insert (content_modifyinsert_element with blockType: "markdown") :white_check_mark: Parses Markdown into rich text
Replace (content_modifyreplace_content) :cross_mark: Plain text only

:robot: What About Table Rows?

For table cells, the API (and MCP) currently treats Markdown as plain text.

  • Standard Columns: Accepts plain text.
  • Canvas Columns: You can write Markdown strings to them via the API, but they are stored as raw text and are not currently rendered as rich content.

The new “Paste as Markdown” feature in the UI is doing some special magic that the API doesn’t yet expose. Pasting Markdown anywhere, including table cells, works great.

This would be a fantastic feature request @Bharat_Batra1: “Add Markdown parsing support to Canvas column writes.”

Try It Yourself

If you’re using an agentic coding assistant (Claude, Gemini CLI, etc.) with MCP support, you can add the Coda MCP server and start working with Markdown programmatically today. The round-trip capability — read as Markdown, write as Markdown — makes it fantastic for LLM-driven document automation within the main canvas. BTW - 100% of my Agentic Coda (book) document was generated in Markdown format and 100% built and agentically-maintained as a Coda document.

While less than ideal, I’ve been automating Markdown in Table Row Fields by using a browser subagent. I first had it add a few items, then asked it to copy a section of my answer above. Browser subagents can read from any URL and write (be careful!!!) to any URL including Coda documents.

Love this insight @Bill_French!

2 Likes