At least nine people died, and more than 20 were injured after Russia struck Ukraine's capital with ballistic missiles. President Volodymyr Zelenskyy blames a lack of interceptor missiles for the deaths.
Adobe has released security updates to address a maximum-severity security flaw in Campaign Classic (ACC), its enterprise-focused marketing automation platform, that could result in arbitrary code execution. The vulnerability, tracked as CVE-2026-48449, carries a severity score of 10.0 on the CVSS scoring system. It has been described as a case of incorrect authorization that could result in
Labour veteran is said to relish role that requires careful negotiation of Trump and impending G20 leadership Extraordinarily, given the importance of geopolitics, the office of foreign secretary has sometimes appeared a consolation prize in British politics, perhaps reflecting the transfer of responsibility to Downing Street or the Cabinet Office. That is not how Ed Miliband views the job. His allies say suggestions that he nurses resentment after he was deprived of the chance to be chancellor misunderstand his grasp of the policy challenges ahead. “Ed has an immense appetite to get things done and is relishing being in this job,” one says. “Ed will be a policy-driven foreign secretary.” Continue reading...
Football's world governing body Fifa abandons plans to sell off stakes in its major competitions after widespread opposition to president Gianni Infantino's proposal.
Europe's governing body, UEFA, had threatened to boycott FIFA tournaments, including the World Cup, unless Gianni Infantino withdrew his plans to sell stakes in FIFA competitions to private equity investors.
FIFA abandoned a plan to create a commercial venture and then sell stakes to minority investors, just days after unveiling it. The plan drew sharp condemnation — and a boycott from European nations.
Attack comes as Trump appears to retreat further from commitment to allow Ukraine to manufacture its own Patriot air defense interceptors. What we know on day 1,620 Kyiv was once again under attack by ballistic missiles early on Saturday as Donald Trump retreated further from a promise to let Ukraine manufacture its own Patriot air defence interceptors. At least four people were killed, Kyiv’s military administration said, while the city’s mayor, Vitali Klitschko, said more than a dozen were wounded in the Russian attack. More than a dozen explosions reverberated through the city, and residents were warned to stay in shelters. The attack comes as Volodymyr Zelenskyy urges Trump and other US officials to help Ukraine gain permission from tech titan Elon Musk to use satellite internet service Starlink for guiding strikes inside Russia . Zelenskyy made the request directly to Trump during an Oval Office meeting this week, according to one person familiar with the matter. He also reportedly told lawmakers later on Capitol Hill that he wanted Starlink’s help. Trump did not commit to Zelenskyy’s request. Musk allows Starlink use within Ukraine, including Russian-occupied areas, but restricts it inside Russia. During a cabinet meeting at Camp David, Trump told reporters that handing over the underlying Patriot technology was “a hard thing” to do . Ukraine’s Zelensky had met Trump earlier this week and said Trump had agreed to license the production of Patriot missiles to Ukraine. Asked whether he was ready to grant Kyiv a licence to build Patriots domestically – something he had suggested at a Nato summit in Turkey just this month – Trump said: “We have not agreed to that. We’re talking about it, but it’s a hard thing to give away that kind of technology.” Giving away the weapons carried its own risks, he added: “People that you give that technology [to], they can some day turn on you. You know that is possible.” Several thousand Ukrainians rallied in central Kyiv on Friday, angry about Zelenskyy’s decision to oust the defence minister, Mykhailo Fedorov. Fedorov is widely credited with driving military innovation during Ukraine’s war with Russia. But having taken charge of the wartime ministry in January, he was dismissed in a surprise government reshuffle in mid-July. Since then, Ukrainians have been gathering next to the presidential office, pushing for Fedorov to be reinstated as he refused to accept another government post. Russia’s main grain lobby group warned on Friday that Ukrainian drone attacks on Russian ships and ports could shut down grain exports via the Black Sea, pushing up prices and causing hunger in Africa and the Middle East. Russia, the world’s largest wheat exporter, and Ukraine, also a large agricultural exporter, have been attacking each other’s facilities and vessels in the Black Sea area in recent weeks, driving wheat prices higher. The disruption to shipping in the Black Sea caused by Ukrainian attacks “poses a direct threat to global food security”, Russia’s Union of Grain Exporters and Producers told Reuters. Ukrainian drone attacks on Russian online retailer Wildberries amount to “acts of terrorism” against civilians, affecting millions of people in Russia and other countries, the company’s founder and CEO, Tatyana Kim, complained on Friday. Ukraine has attacked more than a dozen Wildberries sites since 18 July in a bid to disrupt the operations of the company, a vendor to the Russian war effort and linchpin of Russia’s consumer economy. Continue reading...
OpenAI shares new results on long-standing open problems in mathematics and theoretical computer science, including advances in geometry, cryptography, and complexity.
deepseek-ai/DeepSeek-V4-Flash-0731 The latest release in DeepSeek's V4 family, "with substantially enhanced agentic capabilities". It's 304 billion parameters - 167GB on Hugging Face - but it appears to punch well above its weight. Artificial Analysis rank it ahead of MiniMax M3 - a 428B model. It's $0.14/million input and $0.27/million output pricing means this may currently be the best value-per-intelligence model out there. It's looking very good on the Intelligence Index vs. Cost per Intelligence Index Task chart: I got a disappointing pelican from it using the default reasoning level via OpenRouter: But when I bumped reasoning level up to high I got something much better : llm -m openrouter/deepseek/deepseek-v4-flash-0731 -t pelican -o reasoning_effort high Via Hacker News Tags: ai , generative-ai , llms , pelican-riding-a-bicycle , deepseek , llm-release , openrouter , ai-in-china , artificial-analysis
Developers & Open Source · vercel/next.js Releases
Misc Changes test: stabilize after() deploy revalidation checks: #96428 Add automated code review workflow: #96359 [turbopack] Introduce documentation on experimental.turbopackChunking : #96437 [react-sync] Enable auto-merge on PRs: #96442 [ci] Run new/changed deploy tests asap: #96438 Upgrade React from 0f42eac2-20260730 to cbb046ab-20260731 : #96434 [turbopack] Fix component chunks for workers: #96432 Enable turbopackFileSystemCacheForBuild by default: #96395 Consolidate unhandled rejection logging into a single listener: #95999 Fix adapter outputs for not-found routes when used with cache components: #96390 Update @types/react and @types/react-dom to latest: #96419 docs: document the App Shell stale time threshold for cached content: #96312 [turbopack] add experimental.turbopackChunking config: #96398 Fix isHeadPartial when hydrating from a static fallback shell: #96400 Credits Huge thanks to @ztanner , @marcoshernanz , @sampoder , @eps1lon , @vercel-release-bot , @sokra , @icyJoseph , and @acdlite for helping!
The government had accused David Hearn of ripping a piece of sealant after a $14-million renovation. Hearn has repeatedly said that he simply touched the water in the pool out of curiosity last month.
Tuesday was Stateless MCP day - the rollout of MCP 2.0, or the 2026-07-28 Model Context Protocol specification to use the more formal but less memorable name. This is the most significant change to the MCP spec since it first launched, and has also served to reignite my personal interest in the protocol. For background: MCP is the Model Context Protocol, which describes a standard way to expose new tools to LLM-powered agent frameworks. It was introduced by Anthropic back in November 2024 , had a huge spike of interest through much of 2025, and then became somewhat eclipsed by Skills (another Anthropic invention) when it became apparent that an agent harness with access to a terminal and curl could do most of what MCP did in a more flexible way. I wrote about that in my review of 2025 . I'm coming back around to MCP now. Giving an agent a shell environment with the ability to access the internet is fraught with risk , and requires a strong model that is capable of effectively driving such an environment. MCP tools are easier to audit and control, and simple enough that smaller models that run on a laptop can still drive them reasonably well. The new stateless MCP specification also greatly decreases the complexity of implementing both clients and servers for the protocol. I built three of those this week! What's easier with stateless MCP The best demonstration of the difference between stateful and stateless MCP is in this May 21st blog post that introduced the RC for the new specification. It included a clear before-and-after example. The older stateful MCP (I'm going to call it "legacy MCP") required two HTTP requests - the first to initialize a session and obtain a Mcp-Session-Id , and the second to actually call the tool: POST /mcp HTTP/1.1 Content-Type: application/json { "jsonrpc": "2.0", "id": 1, "method": "initialize", "params": { "protocolVersion": "2025-11-25", "capabilities": { }, "clientInfo": { "name": "my-app", "version": "1.0" } } } POST /mcp HTTP/1.1 Mcp-Session-Id: 1868a90c-3a3f-4f5b Content-Type: application/json { "jsonrpc": "2.0", "id": 2, "method": "tools/call", "params": { "name": "search", "arguments": { "q": "otters" } } } The new stateless way uses a single HTTP request which looks like this: POST /mcp HTTP/1.1 MCP-Protocol-Version: 2026-07-28 Mcp-Method: tools/call Mcp-Name: search Content-Type: application/json { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "search", "arguments": { "q": "otters" }, "_meta": { "io.modelcontextprotocol/clientInfo": { "name": "my-app", "version": "1.0" } } } } This is so much cleaner from both a client- and server-side implementation perspective. It's also a better fit for building scalable web applications, since now you don't need to maintain server-side state to keep track of those session IDs, or worry about routing the same session to the same backend machine. mcp-explorer I couldn't find a great CLI tool for interactively probing an MCP server, so I had Codex help build my own. mcp-explorer is the result. It's a stateless Python CLI tool, so you don't even need to install it to try it out - it works with uvx like this: uvx mcp-explorer list https://agentic-mermaid.dev/mcp This queries Ade Oshineye's agentic-mermaid.dev demo MCP. The above command returns the following list of tools: execute(code: string, timeoutMs?: integer) - Execute Mermaid SDK code Run JavaScript in an isolated sandbox; return a value. describe_sdk(family: string, detail?: string) - Describe Mermaid SDK operations Return version-matched mutation operations for one diagram family. render_svg(source: string, options?: object) - Render Mermaid as SVG Render a Mermaid source string to themeable SVG. Returns { ok, svg }. render_ascii(source: string, useAscii?: boolean, targetWidth?: integer, options?: object) - Render Mermaid as text Render a Mermaid source string to text. Returns { ok, text }. render_png(source: string, scale?: number, background?: string, fitTo?: object, options?: object) - Render Mermaid as PNG Rasterize a Mermaid source string to PNG. Returns { ok, png_base64 }. ... Then to inspect a tool: uvx mcp-explorer inspect render_svg This outputs a whole bunch of information, including the JSON schema of the inputs and outputs. To call that tool and pass arguments to it: uvx mcp-explorer call \ https://agentic-mermaid.dev/mcp \ render_svg \ -a source ' graph TD; A-->B ' \ -a options ' {"padding":24} ' Which returns: {"ok":true,"svg":"<svg xmlns=\"http://www.w3.org/2000/svg\" width=... To get just the raw SVG try adding | jq .svg -r to that command. I got back this image : There are a few more commands in the README, but you get the general idea. I find building CLI tools like this to be a really productive way to get familiar with a specification, even if an agent writes most of the actual code. datasette-mcp The second project is datasette-mcp , a Datasette plugin which adds a /-/mcp endpoint to any Datasette instance. This is probably the fourth time I've tried building this plugin, but thanks to the new stateless MCP specification I finally have a version that feels good to release. It provides just three tools: list_databases() , get_database_schema(database_name) , and execute_sql(database_name, sql) . They do exactly what you would expect them to do - though execute_sql() is read-only for the moment. Wire these into an agent, or a chat tool like ChatGPT or Claude, and they'll gain the ability to run SQL queries against your hosted Datasette instance. So far I'm running it on the Datasette mirror of my blog, at datasette.simonwillison.net/-/mcp . It took a bit of fiddling to figure out how to attach that to ChatGPT and Claude, but I got there in the end. Here's a new TIL showing exactly how to do that. Here's a shared Claude session where I asked it: list tables in simonwillison.net And then: what has Simon said recently about MCP? It ran 7 separate SQL queries to figure out the answer. llm-mcp-client My LLM tool is long overdue for an official MCP integration. The new alpha llm-mcp-client plugin is my attempt at exactly that: llm install llm-mcp-client llm -T ' MCP("https://datasette.simonwillison.net/-/mcp") ' ' count the notes ' Here's the output (including reasoning trace, I'm using LLM 0.32rc2 ): Considering note count I see the question "count the notes" is probably asking me to tally up blog notes. It could also mean published notes or drafts, so there's some ambiguity there. I'll need to figure out the total number of notes, likely by querying the count for both published notes and drafts to get a clear answer. Let's execute that count! There are 151 notes . And the output of llm logs for that prompt. Once this is fully baked, I'm considering bringing it directly into LLM core. I'm excited to experiment with MCP in Datasette Agent and llm-coding-agent as well. MCP is a safer way to build with agents A few months after MCP was first released, I wrote Model Context Protocol has prompt injection security problems , where I noted that the pattern of having end users mix and match tools pushed responsibility for avoiding data exfiltration attacks out to the users themselves. I hadn't coined the Lethal Trifecta yet, but that was absolutely what I had in mind. Then general agents with arbitrary shell and curl access came along, and that's so much harder to keep secure! Something I've come to appreciate about MCP is that it's much easier to reason about agent capabilities and what might go wrong than with arbitrary command execution in an open network environment - the default for most of today's general and coding agent tools. I plan to lean into MCP a whole lot more when I'm building sensitive applications on top of LLMs. Tags: projects , ai , datasette , mermaid , generative-ai , llms , llm , anthropic , model-context-protocol