diff --git a/src/client/components/mfm.ts b/src/client/components/mfm.ts
index f3411cadc3..ad6e711f6f 100644
--- a/src/client/components/mfm.ts
+++ b/src/client/components/mfm.ts
@@ -11,6 +11,7 @@ import MkGoogle from '@client/components/google.vue';
 import MkSparkle from '@client/components/sparkle.vue';
 import MkA from '@client/components/global/a.vue';
 import { host } from '@client/config';
+import { fnNameList } from '@/mfm/fn-name-list';
 
 export default defineComponent({
 	props: {
@@ -46,7 +47,7 @@ export default defineComponent({
 	render() {
 		if (this.text == null || this.text == '') return;
 
-		const ast = (this.plain ? mfm.parsePlain : mfm.parse)(this.text);
+		const ast = (this.plain ? mfm.parsePlain : mfm.parse)(this.text, { fnNameList });
 
 		const validTime = (t: string | null | undefined) => {
 			if (t == null) return null;
diff --git a/src/mfm/fn-name-list.ts b/src/mfm/fn-name-list.ts
new file mode 100644
index 0000000000..1203bfffde
--- /dev/null
+++ b/src/mfm/fn-name-list.ts
@@ -0,0 +1,23 @@
+// NOTE: client/components/autocomplete.vueにも関数のリスト(MFM_TAGS)があるので統合?
+
+const fnNameList = [
+	'tada',
+	'jelly',
+	'twitch',
+	'shake',
+	'spin',
+	'jump',
+	'bounce',
+	'flip',
+	'x2',
+	'x3',
+	'x4',
+	'font',
+	'blur',
+	'rainbow',
+	'sparkle',
+];
+
+export {
+	fnNameList
+};
diff --git a/src/remote/activitypub/misc/get-note-html.ts b/src/remote/activitypub/misc/get-note-html.ts
index 043335a5be..a24ec43a69 100644
--- a/src/remote/activitypub/misc/get-note-html.ts
+++ b/src/remote/activitypub/misc/get-note-html.ts
@@ -1,9 +1,10 @@
 import * as mfm from 'mfm-js';
+import { fnNameList } from '@/mfm/fn-name-list';
 import { Note } from '@/models/entities/note';
 import { toHtml } from '../../../mfm/to-html';
 
 export default function(note: Note) {
-	let html = note.text ? toHtml(mfm.parse(note.text), JSON.parse(note.mentionedRemoteUsers)) : null;
+	let html = note.text ? toHtml(mfm.parse(note.text, { fnNameList }), JSON.parse(note.mentionedRemoteUsers)) : null;
 	if (html == null) html = '<p>.</p>';
 
 	return html;
diff --git a/src/remote/activitypub/renderer/person.ts b/src/remote/activitypub/renderer/person.ts
index f2a283a870..7e94abddfc 100644
--- a/src/remote/activitypub/renderer/person.ts
+++ b/src/remote/activitypub/renderer/person.ts
@@ -11,6 +11,7 @@ import { IIdentifier } from '../models/identifier';
 import renderHashtag from './hashtag';
 import { DriveFiles, UserProfiles } from '@/models/index';
 import { getUserKeypair } from '@/misc/keypair-store';
+import { fnNameList } from '@/mfm/fn-name-list';
 
 export async function renderPerson(user: ILocalUser) {
 	const id = `${config.url}/users/${user.id}`;
@@ -66,7 +67,7 @@ export async function renderPerson(user: ILocalUser) {
 		url: `${config.url}/@${user.username}`,
 		preferredUsername: user.username,
 		name: user.name,
-		summary: profile.description ? toHtml(mfm.parse(profile.description)) : null,
+		summary: profile.description ? toHtml(mfm.parse(profile.description, { fnNameList })) : null,
 		icon: avatar ? renderImage(avatar) : null,
 		image: banner ? renderImage(banner) : null,
 		tag,
diff --git a/src/services/note/create.ts b/src/services/note/create.ts
index 69d854ab1a..98819c69a4 100644
--- a/src/services/note/create.ts
+++ b/src/services/note/create.ts
@@ -34,6 +34,7 @@ import { deliverToRelays } from '../relay';
 import { Channel } from '@/models/entities/channel';
 import { normalizeForSearch } from '@/misc/normalize-for-search';
 import { getAntennas } from '@/misc/antenna-cache';
+import { fnNameList } from '@/mfm/fn-name-list';
 
 type NotificationType = 'reply' | 'renote' | 'quote' | 'mention';
 
@@ -182,10 +183,10 @@ export default async (user: { id: User['id']; username: User['username']; host:
 
 	// Parse MFM if needed
 	if (!tags || !emojis || !mentionedUsers) {
-		const tokens = data.text ? mfm.parse(data.text)! : [];
-		const cwTokens = data.cw ? mfm.parse(data.cw)! : [];
+		const tokens = data.text ? mfm.parse(data.text, { fnNameList })! : [];
+		const cwTokens = data.cw ? mfm.parse(data.cw, { fnNameList })! : [];
 		const choiceTokens = data.poll && data.poll.choices
-			? concat(data.poll.choices.map(choice => mfm.parse(choice)!))
+			? concat(data.poll.choices.map(choice => mfm.parse(choice, { fnNameList })!))
 			: [];
 
 		const combinedTokens = tokens.concat(cwTokens).concat(choiceTokens);