Featured Post

Over the past year, I have spent a lot of time talking to educators, researchers, and engineers about AI. The feeling is almost universal: it is impressive, it is helpful, but you should absolutely not trust it with your math even if it sounds confident.

That tension between how capable AI feels and how accurate it actually is has been on my mind for months. AI is not going away. The challenge now is figuring out how to make it reliable.

That is where Maple MCP comes in.

Maple MCP (Model Context Protocol) connects large language models like ChatGPT, Claude, Cohere, and Perplexity to Maple’s world-class math engine.

When your AI encounters math, your AI can turn to Maple to handle the computation so the results are ones you can actually trust.

It is a simple idea, but an important one: Maple does the math and the AI does the talking. Instead of guessing, the AI can be directed to call on Maple whenever accuracy matters.

Model Context Protocol (MCP) is an emerging open standard that allows AI systems to connect to external tools and data sources. It gives language models a structured way to request computations, pass inputs, and receive reliable outputs, rather than trying to predict everything in text form.

Here is a high-level view of how MCP fits into the broader ecosystem:

MCP Architecture Diagram

Figure 1. High-level architecture of the Model Context Protocol (MCP)
Source: modelcontextprotocol.io

MCP lets an AI system connect securely to specialized services, like Maple, that provide capabilities the model does not have on its own.

If you want to learn more about the MCP standard, the documentation is a great starting point: Model Context Protocol documentation

Here is a glimpse of what happens when Maple joins the conversation:

Examples of Maple MCP in action

Figure 2. Examples of Maple MCP in action

Depending on the prompt, Maple MCP can evaluate expressions symbolically or numerically, execute Maple code, expand or factor expressions, integrate or solve equations, and even generate interactive visualizations. If you ask for an exploration or an activity, it can create a Maple Learn document with the parameters and sliders already in place.

As an example of how this plays out in practice, I asked Maple MCP:

“I'd like to create an interactive math activity in Maple that allows my students to explore the tangent of a line for the function f(x) = sin(x) + 0.5x for various values of x.”

It generated a complete Maple Learn activity that was ready to use and share. You can open the interactive version here: interactive tangent line activity .

In full disclosure, I did have to go back and forth a bit to get the exact results I wanted, mostly because my prompt wasn’t very specific, but the process was smooth, and I know it will only get better over time.

What is exciting is that this does not replace the LLM; it complements it. The model still explains, reasons, and interacts naturally. Maple simply steps in to do the math—the part AI cannot reliably do on its own.

We have opened the Maple MCP public beta, and I would love for you to try it.

Sign up today and we will send you everything you need to get started!

Featured Post

Hi Maplesoft Support / Community,

I've encountered a critical and bizarre bug involving Bits:-And correctness on large integers (~30 digits) derived from repeated integerdivq2exp operations.

  • Maple 2023 (Linux x86_64)
  • Maple 2025 (Linux x86_64)
  • Maple 2025 (Windows x86_64)

The correctness of Bits:-And depends on the order of execution

(See attached common.mpl, bug_test2.mpl, bug_test3.mpl logic).

Case "Fail" (bug_test2.mpl):

  1. Run operation (loops `integerdivq2exp`).
  2. Print result num1 (semicolon).
  3. Define num1_clean (hardcoded same value).
  4. Bits:-And(num1) -> INCORRECT.
  5. Bits:-And(num1_clean) -> INCORRECT.

Case "Pass" (bug_test3.mpl):

  1. Define num1_clean.
  2. Run operation (loops integerdivq2exp).
  3. Bits:-And(num1) -> CORRECT.
  4. Bits:-And(num1_clean) -> CORRECT.

The same behaviour can be observed in Worksheet mode using read.  (See worksheet_driver.mw)

But the result cannot be reproduced if not using read. (See worksheet_version.mw and worksheet_version2.mw)

Code below:

N := 2100:
n := 1000:
num := rand(0 .. 2^N)():
operation := proc(num, n)
    local q, k;
    q := num;
    for k from 1 to 2 do
        q := integerdivq2exp(q, n); 
    end do;
    q;
end proc:
read "common.mpl";

num1 := operation(num, n);
num1_clean := 1083029963437854242395921050992;

num1_clean_And_result := Bits:-And(num1_clean, integermul2exp(1, n) - 1);
num1_And_result := Bits:-And(num1, integermul2exp(1, n) - 1);

##################################

expected_result := irem(num1_clean, integermul2exp(1, n));

if num1 <> num1_clean then
    error "num1 does not match num1_clean";
end if;
print("num1 matches num1_clean");

if num1_And_result <> num1_clean_And_result then
    error "num1_And_result does not match num1_clean_And_result";
end if;
print("num1_And_result matches num1_clean_And_result");

if num1_And_result <> expected_result then
    error "num1_And_result does not match expected_result";
end if;
print("num1_And_result matches expected_result");
read "common.mpl";

num1_clean := 1083029963437854242395921050992:
num1 := operation(num, n):

num1_clean_And_result := Bits:-And(num1_clean, integermul2exp(1, n) - 1):
num1_And_result := Bits:-And(num1, integermul2exp(1, n) - 1);

##################################

expected_result := irem(num1_clean, integermul2exp(1, n));

if num1 <> num1_clean then
    error "num1 does not match num1_clean";
end if;
print("num1 matches num1_clean");

if num1_And_result <> num1_clean_And_result then
    error "num1_And_result does not match num1_clean_And_result";
end if;
print("num1_And_result matches num1_clean_And_result");

if num1_And_result <> expected_result then
    error "num1_And_result does not match expected_result";
end if;
print("num1_And_result matches expected_result");