Sr. Content Developer at Microsoft, working remotely in PA, TechBash conference organizer, former Microsoft MVP, Husband, Dad and Geek.
150488 stories
·
33 followers

Breaking the "Identity Wall" with Tenancy-as-a-Service

1 Share
Learn how B2B SaaS companies can use Tenancy-as-a-Service to scale past the "Identity Wall" and meet enterprise security requirements like SAML and SCIM.

Read the whole story
alvinashcraft
just a second ago
reply
Pennsylvania, USA
Share this story
Delete

Astro 6.1

1 Share
Astro 6.1 introduces codec-specific Sharp image defaults, advanced SmartyPants configuration, and i18n fallback routes for integrations.
Read the whole story
alvinashcraft
13 seconds ago
reply
Pennsylvania, USA
Share this story
Delete

Announcing Babylon.js 9.0

1 Share
Our mission is to build one of the most powerful, beautiful, simple and open web rendering engines in the world. Today, we are thrilled to announce that mission takes a monumental leap forward with the release of Babylon.js 9.0. https://www.youtube.com/watch?v=Th9mD_D5DrQ Babylon.js 9.0 represents our biggest and most feature-rich update yet. This is a celebration of an incredible year of new features, optimizations and performance improvements that push the boundaries of what’s possible on the web. From groundbreaking lighting and particle systems to geospatial rendering, animation retargeting and an all-new inspector … Babylon.js 9.0 empowers web developers everywhere to create richer, more immersive experiences than ever before. Whether you’re just beginning your Babylon journey, or you’re a graphics expert leveraging 327 simultaneous AI agents, Babylon is built for you! Before we dive in, we want to take a moment to humbly thank the incredible community of developers, contributors and advocates who pour their knowledge, expertise and passion into this platform. Babylon.js would not be here without you. So, let’s dive in and see what’s new!

Clustered Lighting

When a scene has a lot of lights, per-pixel lighting calculations can get incredibly slow. Every single pixel has to compute the lighting contribution from every single light, even if those lights aren’t actually affecting that pixel. Clustered Lighting changes all of that. Babylon.js 9.0 introduces a powerful new Clustered Lighting system that dramatically speeds up lighting calculations by intelligently grouping lights into screen-space tiles and depth slices. At render time, each pixel only calculates lighting from the lights that actually affect it. The result? Scenes with hundreds or even thousands of lights running at buttery smooth frame rates! This system works on both WebGPU and WebGL 2, bringing next-generation lighting performance to the broadest possible audience. Check out a demo: https://aka.ms/babylon9CLDemo Learn more: https://aka.ms/babylon9CLDoc

Example of clustered lights.Textured Area Lights

Building on the Area Lights introduced in Babylon.js 8.0, we’re excited to announce that area lights in Babylon.js 9.0 now support emission textures! This means you can use any image as a light source for your rectangular area light, enabling effects like stained glass projections, LED panel displays or cinematic lighting setups, all with physically accurate light emission. An offline texture processing tool is also available for production workflows, and a runtime processing option is provided for quick prototyping and experimentation. Check out a demo: https://aka.ms/babylon9TALDemo Learn more: https://aka.ms/babylon9TALDoc Example of Textured Area Lights.

Node Particle Editor

We are absolutely thrilled to introduce the Node Particle Editor (NPE), a brand-new visual tool that lets you create complex particle systems using a powerful, non-destructive node graph. If you’re familiar with Babylon’s Node Material Editor, you’ll feel right at home! The NPE gives you complete control over every aspect of your particle systems (from emission shapes and sprite sheets to update behaviors and sub-emitters) all through an intuitive drag-and-connect interface. Whether you’re creating simple smoke effects or elaborate procedural fireworks, the Node Particle Editor makes it easy, visual and fun. Check out a demo: https://aka.ms/babylon9NPEDemo Learn more: https://aka.ms/babylon9NPEDoc A glowing planet in space.

Particle Flow Maps and Attractors

Want even more control over how your particles behave? Babylon.js 9.0 introduces Flow Maps, a screen-aligned texture that controls the direction and intensity of forces applied to particles based on their position on the screen. Each pixel in the flow map encodes a 3D direction vector and strength, giving you fine-grained, artistic control over particle movement. Flow maps work with both CPU and GPU particle systems, and integrate seamlessly with the new Node Particle Editor. Babylon.js 9.0 also adds gravity attractors to the particle system toolkit. An attractor is a simple but powerful concept: define a position and a strength, and watch as particles are pulled (or pushed!) toward that point in space. Set a negative strength to create a repulsor. Attractors can be repositioned and adjusted in real time, making it easy to create dynamic, interactive particle effects like swirling vortexes, magnetic fields or explosion shockwaves. Check out a demo: https://aka.ms/babylon9PartFMDemo Learn more about Particle Flow Maps: https://aka.ms/babylon9PartFMDoc Learn more about Particle Attractors: https://aka.ms/babylon9PartAttDoc Example of Particle Flow Maps.

Volumetric Lighting

Realistic light shafts streaming through fog, dust or haze can transform a scene from flat to cinematic. Babylon.js 9.0 makes this easier than ever with a powerful new Volumetric Lighting system. The result is stunningly realistic light scattering with configurable extinction and phase parameters that give you artistic control over how light interacts with the atmosphere. The system supports directional light sources, and takes full advantage of WebGPU compute shaders for optimal performance. WebGL 2 is also supported with graceful fallbacks. Whether you’re building a moody dungeon crawler, a foggy forest or an atmospheric architectural visualization, Volumetric Lighting brings your scenes to life. Check out a demo: https://aka.ms/babylon9vlDemo Learn more: https://aka.ms/babylon9vlDoc Example of Volumetric Lighting.

Frame Graph

One of the most transformative features in Babylon.js 9.0 is the Frame Graph system. Introduced as an alpha feature in 8.0, the Frame Graph is now a fully realized v1 feature that gives you complete, fine-grained control over the entire rendering pipeline. A Frame Graph is a Directed Acyclic Graph (DAG) where each node represents a rendering task, from object culling to post-processing. You declare what resources each task needs and produces, and the system intelligently manages texture allocation, reuse and optimization. This means substantial GPU memory savings (we’ve seen 40% or more in some cases!) and a level of rendering flexibility that was simply not possible before. You can customize and compose your own rendering pipeline visually using the Node Render Graph Editor, or programmatically through the class framework. No more opaque render black boxes! Check out a demo: https://aka.ms/babylon9FGDemo Learn more: https://aka.ms/babylon9FGDoc Example of Frame Graph.

Animation Retargeting

Animation retargeting is a game-changer for anyone working with character animations. New in Babylon.js 9.0, the retargeting system allows you to take an animation created for one character and apply it to a completely different character, even if they have different skeleton structures, bone proportions or naming conventions. The system mathematically remaps each animated bone transform from the source skeleton to the target, compensating for differences in reference pose, bone length and hierarchy. This means you can share an entire library of locomotion, combat or facial animations across many characters. An interactive Animation Retargeting Tool is also available for experimentation without writing any code! Check out a demo: https://aka.ms/babylon9ARDemo Learn more: https://aka.ms/babylon9ARDoc Three game characters with their arms held out horizontally.

Advanced Gaussian Splat Support

Babylon.js 7.0 introduced Gaussian Splatting, and Babylon.js 9.0 takes it to the next level. This release brings a host of advanced capabilities including support for multiple file formats (.PLY, .splat, .SPZ, and Self-Organizing Gaussians .SOG/.SOGS), Triangular Splatting for opaque mesh-like rendering, shadow casting support and the ability to combine multiple Gaussian Splat assets into a single scene with global splat sorting. You can now programmatically create, modify and download Gaussian Splat data, and each part of a composite splat scene can be independently transformed and animated. The result? Unprecedented flexibility for working with photorealistic volumetric captures on the web. Huge shout out to Adobe for their wonderful contributions to advancing Gaussian Splat support! Check out a demo: https://aka.ms/babylon9GSDemo Learn more: https://aka.ms/babylon9GSDoc Pink lawn chairs lined up in a circle around a fire pit. Those are just some of the standout features in Babylon.js 9.0—there’s much more to explore. Stay tuned for the next posts to learn more about our tooling updates and new geospatial features.
Read the whole story
alvinashcraft
21 seconds ago
reply
Pennsylvania, USA
Share this story
Delete

MCP Configuration Across AI Agents

1 Share
&&
MCP AI Tooling Developer Workflow
The Shift

MCP is becoming the universal adapter for AI tooling — drop a config file in the right place and every compliant agent instantly gains the context it needs to work effectively in your project.

Model Context Protocol (MCP) is rapidly becoming the connective tissue of the modern AI development ecosystem. As AI agents proliferate across editors, terminals, and cloud environments, MCP provides a standardized way for those agents to reach out to external tools, services, and context providers — turning a general-purpose AI assistant into a deeply integrated development partner.

At its core, MCP defines how an AI agent discovers and communicates with MCP servers: lightweight processes or remote endpoints that expose capabilities such as code generation assistance, documentation lookup, live app inspection, or platform-specific tooling. Whether an agent is embedded in a code editor, a CLI, or a browser-based IDE, the protocol remains the same. What developers should know is where each AI agent looks to find its MCP server configurations — let's dive in.

Why MCP

Why MCP Tooling Matters

Without a shared tooling protocol, every AI agent would need its own bespoke integration layer for every tool it wanted to use. MCP solves this by acting as a universal adapter. The benefits are significant:

  • Consistency: developers describe their tooling once and reuse that configuration across multiple agents.
  • Composability: multiple MCP servers can be wired up simultaneously, each handling a different domain (e.g., one for platform documentation, one for live app introspection).
  • Portability: configurations can be committed to source control and shared across teams, ensuring every developer — and every agent — operates with the same capabilities.
  • Extensibility: new tools and platforms can expose MCP servers without waiting for first-party agent support.

For platform maintainers, shipping an MCP server means that any compliant AI agent can immediately become a first-class citizen in their ecosystem. Agents don't need to guess — MCP tools provide the grounding needed to bring contextual AI to developers.

Config

Standardized MCP Server Configurations

MCP server configurations follow a consistent logical structure regardless of the agent consuming them. Each entry declares either a remote server (reachable via a URL) or a local server (launched via a command and arguments). This maps cleanly to two deployment patterns over standard transport protocols:

  • Remote MCP servers are always-on endpoints, typically hosted by a platform vendor. They require no local installation and are ideal for documentation, code intelligence, and cloud-connected tooling.
  • Local MCP servers are spawned on-demand by the agent. They run as child processes on the developer's machine and are well-suited for tasks that require access to the local environment, such as inspecting a running app or reading from the local file system.

Configuration Scope

MCP configurations can also be scoped at two levels:

  • Project level — committed inside the repository (e.g., .github/, .cursor/, .codex/). Every developer who clones the project gets the same agent capabilities automatically. This is the recommended approach for team and open-source projects.
  • Developer level — stored in user-level configuration files outside the repository (e.g., global settings in an IDE or a user-scoped config directory). Useful for personal tooling preferences that shouldn't be enforced across the team.

Uno Platform MCP Tools

Uno Platform is the flexible open source stack for building modern .NET cross-platform apps, complete with rich design & AI tools. For developers to have confidence in agentic workflows, AI agents should be grounded in the latest documentation and have the ability to interact with a running app.

Uno Platform MCP tools illustrate both remote and local patterns:

  • uno — a remote MCP server hosted at https://mcp.platform.uno/v1. Provides platform documentation, API references, and code generation assistance.
  • uno-app — a local MCP server launched via the Uno Dev Server. Connects to a running Uno application and enables live app inspection, diagnostics, and hot-reload-aware tooling.

In JSON format (used by most editor-based agents):

{
  "mcpServers": {
    "uno": {
      "url": "https://mcp.platform.uno/v1"
    },
    "uno-app": {
      "command": "dnx",
      "args": ["-y", "uno.devserver", "--mcp-app"]
    }
  }
}

In TOML format (used by CLI-oriented agents like Codex):

[mcp_servers.uno]
url = "https://mcp.platform.uno/v1"

[mcp_servers.uno-app]
command = "dotnet"
args = ["dnx", "-y", "uno.devserver", "--mcp-app"]

The logical intent is identical — only the serialization format and file locations differ. Once configured, most IDEs will list the Uno Platform MCP tools visually; for CLI agents, the /mcp listing shows configured MCP tools. Let's walk through how popular AI agents find these configurations.

Copilot

GitHub Copilot

Configuration file: mcp.json  ·  Locations: .github/, .vs/, .vscode/

GitHub Copilot supports MCP server configurations scoped to a workspace, searching for mcp.json in several well-known directories depending on the environment:

  • .github/mcp.json — the canonical project-level location, recognized by Copilot across GitHub's tooling surface.
  • .vscode/mcp.json — picked up when working inside Visual Studio Code with the Copilot extension.
  • .vs/mcp.json — picked up when working inside Visual Studio (Windows).

This multi-location support means teams can target different configurations to different editor environments within the same repository, or maintain a single canonical file in .github/ that works everywhere. Committing mcp.json to a Uno Platform repository ensures every contributor working with GitHub Copilot automatically has access to Uno Platform's documentation and live app tooling — no manual setup required.

Claude Code

Claude Code

Configuration file: mcp.json  ·  Location: .claude/

Claude Code is Anthropic's CLI-based agentic coding tool. It reads standard MCP configurations from a mcp.json file placed inside a .claude/ directory at the project root.

Registering Uno Platform MCP tools globally with Claude Code is straightforward:

claude mcp add --scope user --transport http uno https://mcp.platform.uno/v1
claude mcp add --scope user --transport stdio "uno-app" -- dotnet dnx -y uno.devserver --mcp-app

Once .claude/mcp.json is in place, Claude Code automatically attaches the Uno MCP servers when invoked inside the project directory. The remote uno server gives Claude Code access to platform knowledge and XAML/C# code generation assistance, while the local uno-app server enables agents to interact with running Uno applications during agentic sessions.

Codex

Codex

Configuration file: config.toml  ·  Location: .codex/

OpenAI's Codex CLI agent uses TOML rather than JSON for its configuration. MCP servers are declared inside a config.toml file stored in a .codex/ directory at the project root.

Registering Uno Platform MCP tools with Codex:

codex mcp add "uno" --url "https://mcp.platform.uno/v1"
codex mcp add "uno-app" -- dotnet dnx -y uno.devserver --mcp-app

The TOML structure maps directly to the same logical model as the JSON equivalents — each [mcp_servers.<name>] block declares either a URL-based remote server or a command-based local server. Codex spawns the local uno-app server on demand and connects to the remote uno endpoint at the start of each session. Committing .codex/config.toml makes the Uno Platform MCP toolset available to every team member using Codex, with zero additional configuration required.

Cursor

Cursor

Configuration file: mcp.json  ·  Location: .cursor/

Cursor stores project-level MCP configurations in a .cursor/mcp.json file at the repository root. The format mirrors the JSON structure used by other editor-based agents, making it straightforward to keep configurations in sync across tools.

Cursor also supports a user-level MCP configuration through its settings UI, which applies globally across all projects. The project-level .cursor/mcp.json takes precedence when present — the right choice for team-shared tooling. With these servers registered, Cursor's AI features — including inline completions, chat, and Composer — can all leverage Uno Platform context when working inside a Uno Platform project.

Antigravity

Antigravity

Configuration file: mcp_config.json  ·  Location: project root or agent workspace directory

Google's Antigravity agent uses a mcp_config.json file for its MCP server declarations. Unlike the agents above, Antigravity uses a slightly different top-level setup with root access — so it's worth checking the agent's documentation for any schema nuances.

    {
        "mcpServers": {
            "uno": {
                "url": "https://mcp.platform.uno/v1"
            },
            "uno-app": {
            "command": "dotnet",
            "args": [
                "dnx",
                "-y",
                "uno.devserver",
                "--mcp-app",
                "--force-roots-fallback"
            ]
            }
        }
    }

    

With the JSON configuration in place, Antigravity gains access to Uno Platform's full MCP surface — enabling it to answer platform-specific questions, generate idiomatic Uno/XAML code, and interact with a live running application during an agentic workflow.

Summary

Summary

The table below captures where each agent looks for its MCP configuration at a glance:

Agent File Location Format
GitHub Copilot mcp.json .github/, .vscode/, .vs/ JSON
Claude Code mcp.json .claude/ JSON
Codex config.toml .codex/ TOML
Cursor mcp.json .cursor/ JSON
Antigravity mcp_config.json /antigravity JSON

While file names and paths differ slightly, the underlying concepts of MCP configuration are consistent: drop a config file in the right place, declare your MCP servers, and every supported AI agent immediately gains the tools it needs to work effectively in your project.

As the MCP ecosystem matures, configuration-as-code for AI tooling is set to become routine. AI agents in IDEs and CLIs may have nuanced ways to read configurations, but the overall standardization of MCP settings is a clear win for developers everywhere.

The post MCP Configuration Across AI Agents appeared first on Uno Platform.

Read the whole story
alvinashcraft
33 seconds ago
reply
Pennsylvania, USA
Share this story
Delete

Breaking Change Ahead: Graph API Updates to Sensitive Email Properties

1 Share

We’re implementing a significant update in our service affecting applications that modify sensitive email properties on non-draft email messages. These sensitive email properties include the subject, body, recipients, and a number of other properties when changed using any of the message update methods on Graph API.

Immutability of received email messages

There’s a fundamental expectation that once you receive an email message, it should remain unchanged except for specific management-related properties such as read status, flags, and similar attributes. Critical components like the address list, subject, and body text shouldn’t be altered unless a new draft message is created. Exceptions to this rule are specialized use-cases, particularly within the security domain, such as identifying suspicious emails and other privileged operations.

Required permissions for modifying sensitive email properties

To maintain the expected immutability of email messages during standard management operations, we will begin restricting applications from modifying sensitive email properties in non-draft messages unless they possess elevated permissions. Specifically, applications must have one of the following permissions: Mail-Advanced.ReadWrite, MailAdvanced.ReadWrite.All, or Mail-Advanced.ReadWrite.Shared, depending on the scenario. All these permissions require a tenant administrator consent.

The Update message documentation identifies sensitive properties as those that are only updateable if isDraft = true. Once the restriction goes into effect, you can only update these properties in non-draft messages if the application has Mail-Advanced.ReadWrite permissions. Draft messages will continue to be updateable with the current Mail.ReadWrite permissions.

Timeline and recommendations

These required permissions are already available. Enforcement of the new restrictions in our service – blocking Graph API updates to sensitive email properties – will begin on 12/31/2026. If you develop Graph API applications that modify these properties, we strongly recommend updating your applications to request the necessary higher-level permissions as soon as possible. This proactive approach will help ensure a smooth transition and minimize potential disruptions for your customers.

The Exchange Team

microsoft graph api sensitive email message image

The post Breaking Change Ahead: Graph API Updates to Sensitive Email Properties appeared first on Microsoft 365 Developer Blog.

Read the whole story
alvinashcraft
40 seconds ago
reply
Pennsylvania, USA
Share this story
Delete

Microscopic Visual Studio Code Tips for Microscopic Needs

1 Share

Full disclosure: I’ve been guilty of this bad behavior, so while correcting myself, I’ve tried to point out this itty-bitty, teensy-weensy, teeny-tiny little feature in VS Code. I think it’s more of a feature in the PowerShell extension than VS Code itself, but maybe not. It kind of ties into “code folding”, sort of, kind of, but anyway, I’ll hum a few notes…

When you’re scrolling in some horrific steamy fly-infested pile of code, that I might have written, but cannot confirm or deny, and that putrid code contains #region or function statements, you can quickly jump back up to the start of that #region or function by clicking in the breadcrumb trail along the top.

Let’s say you organize your code, I know, stop laughing, just hear me out… in such a way that you have C:\Code\SmellyCode\RottingCode\PoorCustomer\Scripts\Runbooks\ and your file sits right there, waiting for the chalk outline to be drawn before they bag it and take it away. And you’ve opened it, with nitrile gloves, face mask and body suit, of course, and you start scrolling down to say, line 2424 out of 345,230,444,042 total lines. I just mad that up. I think it’s the U.S. national debt, but don’t quote me. You’re deep inside this function and just remembered that a particular variable is defined higher up near the first line within the function: Just click one of the function links (see example below, green stuff).

Or maybe you realize that line 2467 makes a call to a function defined in the same script, but near the start of the #region: well, you can click the region link (see example below, yellow stuff)

The weird squiggly green thing to the left below is just to point out the gap in line numbering to show you how far you’ve stuck your inside inside this corpse. I think this example is roughly like inserting your hand near the eye socket and reaching inside down to the intestines, or something like that. I just finished watching the last episode of The Pitt, so my brain is on medical drama mode. Sorry about that.

Anyhow, I hope you found this useful. If not, get outside and enjoy some fresh air. You’ll forget you ever read this far.

Thanks!



Read the whole story
alvinashcraft
1 minute ago
reply
Pennsylvania, USA
Share this story
Delete
Next Page of Stories